【问题标题】:AngularJS directives as "custom" HTML tags: isn't this dangerous and may conflict with future HTML versions?AngularJS 指令作为“自定义”HTML 标签:这不是很危险并且可能与未来的 HTML 版本冲突吗?
【发布时间】:2014-03-23 10:51:09
【问题描述】:

我目前正在阅读很多关于不同 JS 框架(EmberJS、AngularJS 等)的文章。

乍一看,我喜欢 AngularJS 使用自定义 HTML 标签等指令的想法:

<mytag>...</mytag>

但这不是很危险吗?如果我定义了很多这样的标签,那么未来的 HTML 规范很可能也会定义我的一个自定义标签,但具有完全不同的含义!

我知道 HTML 规范本身可能允许自定义标签:

http://w3c.github.io/webcomponents/spec/custom/

但目前并非如此。那么使用自定义标签作为指令是一种好习惯吗?还是我应该更好地依赖ng-xxx 属性?

【问题讨论】:

标签: javascript html angularjs w3c-validation specifications


【解决方案1】:

我认为创建自己的元素指令是相当安全的。未来出现同名 HTML 标记的风险非常低。

您还可以为指令命名,这将大大降低未来发生命名冲突的风险。

假设你的应用名称是“MyApp”,你可以有这样的东西:

<ma-custom-tag></ma-custom-tag>

这也有助于避免您可能添加到项目中的任何角度模块中的冲突。大多数发布的 Angular 库都应该有一些命名空间。

Angular 项目有一个涉及此概念的最佳实践 Wiki:https://github.com/angular/angular.js/wiki/Best-Practices

【讨论】:

    【解决方案2】:

    自定义元素的名称中需要一个破折号。本机 HTML 标记没有破折号(至少没有破折号)。在 Angular 中,您可以定义带有驼峰名称的指令,这也可以解决您的担忧。

    【讨论】:

      【解决方案3】:

      机会很小,是的。但是,让我们做一些数学运算:

      如果您的标签名称只有一个字母,那么任何一个新标签具有相同名称的可能性为 26 分之一。

      如果是两个字母,则有 26*26 分之一的机会。

      简而言之,它发生的几率是 26^[标签名称中的字母数]。小的。鉴于标准 HTML 中标签名称的平均长度为 6 个字母,这是 308915776 中的一个。这不包括带有破折号的自定义标签。

      此外,AngularJS 是一个 Google 项目。 Google 遥遥领先于我们其他人,如果看起来会发生类似的事情,他们将组建一个团队,并在数小时内找到解决方案。

      您无需担心标签冲突。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-04
        • 1970-01-01
        相关资源
        最近更新 更多