12

假设我在 AngularJS 中编写了一个自定义gravatar指令,该指令绑定到email范围上的一个属性。该指令将替换此 HTML ...</p>

<gravatar email="user.email" />

通过一个公共img标签,其src属性设置为正确的 Gravatar url:

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

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

4

2 回答 2

7

W3C 说

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

作者不得使用本规范或其他适用规范不允许的元素、属性或属性值,因为这样做会使该语言在未来的扩展变得更加困难。

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

自定义元素/属性没有语义价值,因此应避免使用。

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

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

最终你将能够注册你自己的自定义元素,但据我所知,目前还没有浏览器支持这个规范。

于 2013-07-06T14:14:25.810 回答
4

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

于 2013-12-08T13:31:11.583 回答