更新我的答案这是来自https://angular.io/guide/binding-syntax的引用
HTML 属性和 DOM 属性
属性初始化 DOM 属性,您可以配置它们来修改元素的行为,但属性是 DOM 节点的特性。
-
一些 HTML 属性与属性有 1:1 的映射关系;例如,身份证。
-
一些 HTML 属性没有对应的属性;例如,咏叹调-*。
-
一些 DOM 属性没有对应的属性;例如,文本内容。
请记住,HTML 属性和 DOM 属性是不同的东西,即使它们具有相同的名称。
示例 1:
当浏览器渲染时,它会创建一个对应的带有 value 属性的 DOM 节点,并将该值初始化为“Sarah”。
<input type="text" value="Sarah">
当用户在 中输入 Sally 时,DOM 元素的 value 属性变为 Sally。但是,如果您使用 input.getAttribute('value') 查看 HTML 属性值,您会发现该属性保持不变——它返回“Sarah”。
HTML属性值指定初始值; DOM value 属性是当前值。
示例 2: 禁用按钮
按钮的 disabled 属性默认为 false,因此该按钮处于启用状态。
当您添加 disabled 属性时,您正在将按钮的 disabled 属性初始化为 true,从而禁用按钮。
<button disabled>Test Button</button>
添加和删除 disabled 属性会禁用和启用按钮。但是,属性的值是无关紧要的,这就是为什么您不能通过编写 Still Disabled 来启用按钮的原因。
要控制按钮的状态,请设置 disabled 属性。
属性和属性比较
虽然您可以在技术上设置 [attr.disabled] 属性绑定,但值的不同之处在于属性绑定必须是布尔值,而其对应的属性绑定取决于该值是否为空。考虑以下几点:
<input [disabled]="condition ? true : false">
<input [attr.disabled]="condition ? 'disabled' : null">
使用 disabled 属性的第一行使用布尔值。第二行,它使用 disabled 属性检查 null。
通常,使用属性绑定而不是属性绑定,因为布尔值易于阅读,语法更短,属性更高效。