如果我们尝试这样的代码:
<td [colspan]="1 + 1">Column</td>
或这个:
<td colspan="{{1 + 1}}">Column</td>
我们很快就会发现“ colspan
不是已知的本地属性。”
从 A2 文档中我们了解到:
该元素没有 colspan 属性。它具有“colspan”属性,但插值和属性绑定只能设置属性,不能设置属性。
我们必须改为这样做:
<td [attr.colspan]="1 + 1">Column</td>
这很公平。
问题:
我的问题是,为什么 colspan
不是 DOM 的属性,如果它丢失,浏览器怎么可能呈现表格,因为浏览器呈现 DOM 而不是 HTML?
另外,如果我打开 Chrome 检查器并转到属性选项卡,为什么我可以看到 colspan 作为元素的属性?
为什么 DOM 会出现这种不一致?
原文由 superluminary 发布,翻译遵循 CC BY-SA 4.0 许可协议
**类似的例子
<label for=...>
财产和属性并不总是 1:1。一个经常遇到的例子是label标签
在角度
失败并出现相同的错误,您需要像这样绑定
或者
但
也会起作用,因为在这种情况下
htmlFor
是反映到 DOM 的属性for
属性。另见 https://developer.mozilla.org/de/docs/Web/API/HTMLLabelElementhtmlFor
属性(在Properties
部分)另请参阅 属性和特性之间有什么区别?
colSpan
实际财产名称根据 https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement
colSpan
是反映到colspan
属性的属性(大写S
)另见 https://plnkr.co/edit/BZelYOraELdprw5GMKPr?p=preview
工作得很好。
为什么 Angular 默认绑定属性
出于性能原因,Angular 默认绑定到该属性。绑定到属性是昂贵的,因为属性反映在 DOM 中,DOM 中的更改会导致重新评估更改后可能匹配的 CSS 样式,而属性只是 JavaScript 对象中已更改的值。
使用
attr.
您明确选择了昂贵的行为。