Ng-app 和 data-ng-app 有什么区别?

我已经开始学习 AngularJS,并对 ng-appdata-ng-app指令之间的区别感到困惑。

71348 次浏览

在运行时行为方面没有,这些只是不同风格的命名指令,如下所述: http://docs.angularjs.org/guide/directive

指令具有驼峰大小写名称,如 ngBind 通过将骆驼的大小写名称翻译成蛇的大小写名称来调用 特殊字符: ,-,或 _。可选的指令可以是 前缀为 x-,或数据-,使其符合 HTML 验证器 是一些可能的指令名称的列表: ng: bind,ng-bind, Ng _ bind、 x-ng-bind 和 data-ng-bind。

正如您在阅读本文时所看到的,data-可以用来使您的 HTML 通过 HTML 验证器测试/

在现代浏览器中没有区别,但是在较老的 IE 中,除非您声明一个定义它的 XML 名称空间,否则它们不会工作。

还有一个验证区别在于,ng-app不是有效的 XHTML,并将导致您的网页失败的 HTML 验证。Angular 允许您在其指令前加上 data-x-的前缀,以允许它进行验证。

可以声明有角命名空间 <html xmlns:ng="http://angularjs.org" ng-app>

这些答案大多数只是简单地说 使模板有效的 HTML符合 HTML 验证器,也没有解释这些术语的含义。

我不确定,但我猜测这些术语适用于 HTML 验证程序,它们扫描代码以确保符合标准——有点像 lint。它们不将 ng-app识别为有效属性。他们希望在非默认的 HTML 属性前面加上

data-attribute_name_here.

因此,AngularJS的创建者为他们的指令创建了替代名称,其中包括他们面前的 data-,这样 HTML 验证程序就会“喜欢”它们。

如果希望使页面 HTML 有效,可以使用 data-ng-而不是 ng-。
这个 威尔抛出一个错误

<div ng-app="">


<p>Input something in the input box:</p>
<p>Name: <input type="text" ng-model="name"></p>
<p ng-bind="name"></p>


</div>

这个 不会抛出一个错误

<div data-ng-app="scope" data-ng-init="name='test'">


<p>Input something in the input box:</p>
<p>Name: <input type="text" data-ng-model="name"></p>
<p data-ng-bind="name"></p>


</div>

当然,这两者之间没有什么区别,除了某些 HTML5验证器会在属性上抛出一个错误,比如 ng-app,但是它们不会在任何前缀为 data-(比如 data-ng-app)的属性上抛出一个错误。因此,使用数据前缀与我们的角度指令是好的。

甚至你可以使用角度指令在下面提到的方式 Ng-bind,ng: bind,ng _ bind,data-ng-bind,x-ng-bind

这两个术语的基本区别在于 data-ng-app 验证 HTML,而后者不验证 HTML。功能保持不变。 如需更多参考,可以尝试 w3Validator。