Angularjs ng应用程序和data ng应用程序之间的区别是什么?

Angularjs ng应用程序和data ng应用程序之间的区别是什么?,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我已经开始了解AngularJS,并且对ng app和data ng app指令之间的区别感到困惑。就运行时行为而言,这些只是不同的命名指令样式,如下所述: 指令有驼峰大小写的名称,如ngBind。指令可以是 通过将camel case名称转换为snake case来调用 特殊字符:、-、或。也可以选择使用该指令 前缀为x-,或数据-使其符合HTML验证程序。在这里 是一些可能的指令名称的列表:ng:bind,ng bind, ng_-bind、x-ng-bind和数据ng-bind 通过阅读本

我已经开始了解AngularJS,并且对
ng app
data ng app
指令之间的区别感到困惑。

就运行时行为而言,这些只是不同的命名指令样式,如下所述:

指令有驼峰大小写的名称,如ngBind。指令可以是 通过将camel case名称转换为snake case来调用 特殊字符:、-、或。也可以选择使用该指令 前缀为x-,或数据-使其符合HTML验证程序。在这里 是一些可能的指令名称的列表:ng:bind,ng bind, ng_-bind、x-ng-bind和数据ng-bind


通过阅读本文,您可以看到,
数据-
可用于使您的HTML通过HTML验证程序测试

在现代浏览器中没有区别,但在较旧的IE中,除非您声明一个定义它的XML命名空间,否则它们将无法工作


还有一个验证差异是
ng app
不是有效的XHTML,并且会导致您的网页无法通过HTML验证。Angular允许您使用
数据-
x-
作为其指令的前缀,以允许它进行验证。

您可以声明Angular命名空间

这些答案中的大多数都只是说使模板有效HTML或HTML验证程序兼容,而没有解释这些术语的含义

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

data-attribute\u name\u此处


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

如果您想使页面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>

在输入框中输入一些内容:

姓名:

不会引发错误

<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 ng app。因此,在角度指令中使用数据前缀是很好的

甚至你也可以用下面提到的方法使用角度指令
ng-bind,ng:bind,ng_-bind,data-ng-bind,x-ng-bind这两个术语之间的基本区别是data-ng-app验证HTML,而后者不验证。功能保持不变。
有关更多参考信息,您可以尝试w3Validator。

HTML规范中的哪些地方允许这样做?@user1876508:+1表示“确定。那么,‘符合验证程序’到底意味着什么?”方法。如果你做了研究,你会发现你的猜测基本上是对的有效的HTML不适用于HTML验证程序。浏览器解析HTML。如果您开始偏离HTML规范,则无法保证您的HTML将被正确解析。是的,验证器是最终的手段。我们的目标是使您的网页尽可能接近规范,从而最大限度地增加浏览器的数量——旧的、现在的和将来的——在这些浏览器中,您的应用程序将按预期实际工作。在“data-*”的情况下,浏览器可能会引入与标准相同的属性,这将与应用程序的属性发生冲突。此外,坚持这样的标准将有助于工具(如编辑器)理解它,并使它们对您更有用。@Blender“不能保证您的HTML将被正确解析”,对有效的HTML也是如此。@Chuck我不是建议您这样或那样做,只是这个问题并不特别重要。我们不妨在讨论空格和制表符时进行辩论。hahaThis似乎只适用于遗留应用程序:“如果您选择使用老式的指令语法ng:则在html中包含xml名称空间,以使IE满意。(这是出于历史原因,我们不再建议使用ng:)”。来源:只有在使用“ng:”时,这才是正确的。我相信“数据ng-”应该得到验证。可能是@chenrui的重复-顺便说一句,这个Q是第一个出现的。(4月24日vs 5月16日)您的应用程序不会受到影响,即使您使用ng应用程序或data ng应用程序,Angular也会按预期工作,但正如@user2289659所述,使用数据-*是从HTML5开始引入的自定义属性标准。请解释为什么第一个场景会引发错误?这是引用w3c验证。