html - 何时使用 [name] 与 [attr.name]?
问题描述
有谁知道为什么可以使用[id]
并且必须[attr.contenteditable]
在 Angular 中用作属性绑定?
我研究了一段时间,我找不到答案。
为什么有些html原生属性可以只用名字修改,而有些则需要通过attr属性修改?
解决方案
(这个答案假设你绑定到一个HTMLElement
而不是一个应用内模型对象。鉴于[attr.{name}]
-syntax仅支持DOMHTMLElement
对象,这个假设应该成立)
使用 DOM 时,某些元素的 DOM 接口为某些 HTML 属性定义了一流/原生属性(如JavaScript 属性)。
例如,HTMLElement
DOM 接口定义了一个第一类属性id
,这就是为什么您可以直接在绑定表达式中使用它[id]
:同样HTMLAnchorElement
暴露了href
属性。
(我注意到这contenteditable
是WHATWG HTML LS 中定义的 DOM 接口属性,但不是 W3C 的 DOM 规范,有趣......)
但是,任意(超现代、用户定义和过时的)HTML 属性不会通过 DOM 接口公开,因此只能通过 DOM 中的attributes
集合访问。Angular 要求您使用[attr.{name}]
非 DOM 属性的属性,以便它知道它必须使用attributes
集合,而不是假设它可以直接绑定到 DOM 属性。
要更直接地回答您的问题:
何时使用 [name] 与 [attr.name]?
遵循此流程图:
- 我作为 DOM 接口属性公开后的值是什么?
- 是的:
- 利用
[propertyName]
- 利用
- 不:
- 我在没有相应 DOM 接口属性的 HTML 属性之后的值?
- 是:使用
[attr.{attributeName}]
- 不:辞掉你的工作,让其他人来处理快速发展的 JavaScript 开发者生态系统的情绪和精神压力。
- 是:使用
- 我在没有相应 DOM 接口属性的 HTML 属性之后的值?
- 是的:
推荐阅读
- makefile - 致命错误的原因是什么:*** 没有规则使目标“安装”。停止
- java - 实例化构造函数后如何传入参数?
- gridview - 在 yii 中 pjax 后 datepicker 的 showButtonPanel 属性不起作用
- ios - 通过使用拖动委托向上或向下拖动一行来重新排列表格中的部分(iOS 11)
- java - 线程,易失变量不更新
- ios - 根据页面控制器当前索引将滚动视图移动到下一页
- google-apps-script - Importrange 函数 - 可以使用的最新最大数据大小是多少?3月底换了
- email - 电子邮件最小大小(以字节为单位)
- node.js - mongoose findById or findone is not wotking
- javascript - Select2自动完成和标记不起作用Rails 5