我为输入元素创建了一个自定义表单控件(使用 ControlValueAccessor),并为 writeValue 方法提供了以下代码。
@ViewChild('inputElement', {static: true}) input;
writeValue(obj: any): void {
this.renderer.setAttribute(this.input.nativeElement, 'value', obj);
}
此方法仅更新一次视图(输入元素) ,即在我初始化表单时。如果我手动修补与上述组件关联的表单控件的值,则表单控件会更新,但视图不会更新。
但是,如果我使用setProperty方法而不是setAttribute方法,如下所示,
@ViewChild('inputElement', {static: true}) input;
writeValue(obj: any): void {
this.renderer.setProperty(this.input.nativeElement, 'value', obj);
}
视图得到更新。
但问题是,文档说value是 HTML 中的属性,而不是dom 属性。
有人可以解释在 Angular 的 Renderer2 中产生这种行为的 HTML 中的属性和属性之间有什么区别吗?