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

时间:2013-04-24 05:59:32

标签: angularjs angularjs-directive

我已经开始了解AngularJS,并对ng-appdata-ng-app指令之间的差异感到困惑。

7 个答案:

答案 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