假设我在AngularJS中编写了一个自定义gravatar
指令,该指令绑定到作用域上的email
属性。该指令将替换此HTML ...
<gravatar email="user.email" />
通过img
标记将src
属性设置为正确的Gravatar网址:
<img src="http://gravatar.com/avatar/..." />
我的问题可能有点宽泛甚至天真,但最初在我的网页的HTML中有<gravatar />
标记“有多糟糕”?除了没有通过W3C验证之外,还有任何“现实世界”的后果吗?
答案 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输出替换的占位符。