AngularJS指令中自定义HTML标记的后果

时间:2013-07-06 12:44:00

标签: html angularjs angularjs-directive

假设我在AngularJS中编写了一个自定义gravatar指令,该指令绑定到作用域上的email属性。该指令将替换此HTML ...

<gravatar email="user.email" />

通过img标记将src属性设置为正确的Gravatar网址:

<img src="http://gravatar.com/avatar/..." />

我的问题可能有点宽泛甚至天真,但最初在我的网页的HTML中有<gravatar />标记“有多糟糕”?除了没有通过W3C验证之外,还有任何“现实世界”的后果吗?

2 个答案:

答案 0 :(得分:7)

W3C说

  

作者不得将元素,属性或属性值用于除其适当的预期语义目的之外的目的,因为这样做会阻止软件正确处理页面。

  

作者不得使用本规范或other applicable specifications不允许的元素,属性或属性值,因为这样做会使语言在将来更难扩展。

http://www.w3.org/html/wg/drafts/html/master/dom.html#elements

自定义元素/属性没有语义值,应该避免这些原因。

您可能不会注意到任何直接后果。毕竟,Angular本身使用了非确认ng属性(尽管它们也支持data-前缀)。

您可能遇到的唯一可能问题是,如果您引入的元素当前是自定义元素,则会成为规范的一部分,并且行为与您之前的预期不同,但我认为这种可能性极小。即便如此,如果可以的话,我会避免使用任何自定义的东西。

Eventually you will be able to register your own custom elements,但据我所知,没有浏览器支持此规范。

答案 1 :(得分:4)

虽然页面主体的初始源(在角度处理ng-app元素之前)可能不符合W3C标准,但如果在指令中使用“replace:true”,则自定义元素将替换为模板HTML,可以有效。因此,在这种情况下,您可以将角元素视为仅用终端HTML输出替换的占位符。