html - HTML 中的属性和特性有什么区别?

标签 html angular dom angular-renderer2

我为输入元素创建了一个自定义表单控件(使用 ControlValueAccessor),具有以下 writeValue 方法代码。

@ViewChild('inputElement', {static: true}) input;    
writeValue(obj: any): void {
    this.renderer.setAttribute(this.input.nativeElement, 'value', obj);
}

此方法更新 View (输入元素)仅一次,即在我初始化表单时。如果我手动修补与上述组件关联的表单控件的值,表单控件会更新,但 View 不会更新

但是,如果我使用 setProperty 方法而不是 setAttribute 方法,如下所示,

@ViewChild('inputElement', {static: true}) input; 
writeValue(obj: any): void {
    this.renderer.setProperty(this.input.nativeElement, 'value', obj);
}

View 得到更新

但问题是,文档说 value 是 HTML 中的 attribute,而不是 dom property .

谁能解释一下在 Angular 的 Renderer2 中产生这种行为的 HTML 中属性和属性之间的区别是什么?

最佳答案

对于 HTML 中的输入元素,有一个名为 valueattribute 和一个property

  1. Value 属性 - 表示输入元素的当前值。
  2. 值属性 - 表示输入元素的初始值。

因此,在 HTML 中,属性 是在 HTML 元素上定义的,并且应该是在创建这些元素时传递给它们的初始值。一旦浏览器创建了 DOM(也就是在呈现页面之后),HTML 元素就变成了对象(节点对象),因此它们具有属性

因此,为了使用angular的Renderer2改变输入元素的当前值,需要使用setProperty方法。

如果您使用 setAttribute 方法,它只会更改一次值,即在您创建元素时。它不会改变当前值。

关于html - HTML 中的属性和特性有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57213371/

相关文章:

html - border-bottom 没有按预期工作

java - 如何使用正则表达式将所有出现的 ${...} 替换为 <c :out value ="${...}"/>

javascript - 如何在javascript中验证两个复选框

c# - 确定主要文章图片 - HTML Agility Pack

javascript - javascript对象和html dom之间的内存利用率

html - 防止文本落后于幻灯片

javascript - 使用 rxjs 时,为什么 switchMap 不触发 complete 事件?

javascript - 传单 map 旋转( typescript )

html - Angular 2 限制在控件上触发的事件或 Action 的数量

javascript - 使用 DOM 添加元素,document.write