我已经开始了解AngularJS,并对ng-app
和data-ng-app
指令之间的差异感到困惑。
答案 0 :(得分:121)
这些答案大多只是说使模板有效HTML ,或 HTML Validator Compliant ,而不解释这些术语的含义。
我不确定,但我猜这些条款适用于扫描代码以符合标准的HTML验证程序 - 有点像lint。他们不会将ng-app
识别为有效属性。他们希望非默认HTML属性以
data-attribute_name_here
。
因此,AngularJS
的创建者为其指令创建了备用名称,其中包含data-
,以便HTML验证程序能够“喜欢”它们。
答案 1 :(得分:40)
在运行时行为方面没有,这些只是不同的命名指令样式,如下所述:http://docs.angularjs.org/guide/directive
指令有诸如ngBind之类的骆驼名称。该指令可以 通过将驼峰案例名称翻译成蛇案例来调用 特殊字符:, - 或_。可选地,指令可以是 以x-或数据为前缀,使其符合HTML验证器。这里 是一些可能的指令名称列表:ng:bind,ng-bind, ng_bind,x-ng-bind和data-ng-bind。
正如您在阅读本文时所看到的,data-
可用于使HTML传递HTML验证器测试/
答案 2 :(得分:6)
您可以声明角度命名空间<html xmlns:ng="http://angularjs.org" ng-app>
答案 3 :(得分:5)
在现代浏览器中没有区别,但在较旧的IE中,除非您声明定义它的XML命名空间,否则它们将无法工作。
还有一个验证差异,ng-app
无效XHTML,会导致您的网页无法通过HTML验证。 Angular允许您使用data-
或x-
为其指令添加前缀,以允许其进行验证。
答案 4 :(得分:4)
如果要使页面HTML有效,可以使用数据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>
答案 5 :(得分:3)
这两个术语的基本区别在于data-ng-app验证HTML而后者不验证。功能保持不变。 有关更多参考,您可以尝试使用w3Validator。
答案 6 :(得分:-2)
两者之间没有区别,只是某些HTML5验证器会在ng-app这样的属性上抛出错误,但是对于任何带有数据前缀的东西,它们都不会抛出错误,比如data-ng-app 。所以在我们的angular指令中使用data-prefix很好。
即使你可以用下面提到的方式使用角度指令 ng-bind,ng:bind,ng_bind,data-ng-bind,x-ng-bind