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

我目前正在为angular.js 开始教程video

在某个时刻(12'40“之后),发言者声明ng-appdata-ng-app=""<html>标签内部或多或less是等价的, ng-model="my_data_bindingdata-ng-model="my_data_binding" 。 但是,发言者说,html将通过不同的validation器validation,这取决于使用哪个属性。

你能解释两种方法之间的区别, ng-前缀与data-ng-前缀吗?

好问题。 区别很简单 – 除了某些HTML5validation器会在像ng-app这样的属性上抛出一个错误之外 ,两者之间完全没有什么区别,但是它们不会抛出任何以data-为前缀的错误,如data-ng-app

因此,要回答你的问题,如果你想validation你的HTML更容易,使用data-ng-app

有趣的事实:你也可以使用x-ng-app来达到同样的效果。

来自Angularjs文档

Angular规范化元素的标签和属性名称,以确定哪些元素匹配哪些指令。 我们通常通过区分大小写的camelCase标准化名称(例如ngModel)来引用指令。 但是,由于HTML不区分大小写,因此我们通过小写forms引用DOM中的指令,通常使用DOM元素(例如ng-model)上的由划线定界的属性。

规范化过程如下:

从元素/属性的前面剥离x和数据。 将:, – 或_分隔名称转换为camelCase。 以下是一些与ngBind匹配的元素的等价示例:

基于以上的声明以下全部是有效的指令

1. ng-bind
2. ng:绑定
3. ng_bind
4. data-ng-bind
5. x-ng-bind

不同之处在于自定义data-*属性在HTML5规范中是有效的。 所以如果你需要你的标记validation,你应该使用它们而不是ng属性。

简答:

ng-modeldata-ng-model是相同和相等的!


为什么?

  1. 原因: data-前缀
    HTML5规范期望任何自定义属性都以data-为前缀。

  2. 原因: ng-modeldata-ng-model都是相同的,等价的。

AngularJS文档 – 标准化

Angular规范化元素的标签和属性名称,以确定哪些元素匹配哪些指令。 我们通常通过区分大小写的camelCase标准化名称(例如ngModel )来引用指令。 但是,由于HTML不区分大小写,因此我们通过小写forms引用DOM中的指令,通常使用DOM元素(例如ng-model )上的由划线定界的属性。

规范化过程如下:
1.从元素/属性的前面去掉x-data-
2.将:-_ -delimited名称转换为camelCase

例如
以下forms都是等价的,并且匹配ngBind指令:

 <div ng-controller="Controller"> Hello <input ng-model='name'> <hr/> <span ng-bind="name"></span> <br/> <span ng:bind="name"></span> <br/> <span ng_bind="name"></span> <br/> <span data-ng-bind="name"></span> <br/> <span x-ng-bind="name"></span> <br/> </div> 

如果你想让页面的HTML有效,你可以使用data-ng-而不是ng-。

如果你想在服务器上运行html或者html-fragments,那么你最好使用data-ng-xxx而不是ng-xxx属性。

  1. 这使得你的html有效,这意味着它可以被基于html(基于服务器)的parsing器使用,如domdocument(php)或其他。 这些parsing器经常在格式不正确的html上失败。
  2. Angular规范化属性,但请记住,这是在客户端,而不是在服务器上。