ng-app与data-ng-app有什么区别?
我目前正在为angular.js
开始教程video
在某个时刻(12'40“之后),发言者声明ng-app
和data-ng-app=""
在<html>
标签内部或多或less是等价的, ng-model="my_data_binding
和data-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-model
和data-ng-model
是相同和相等的!
为什么?
-
原因:
data-
前缀
HTML5规范期望任何自定义属性都以data-
为前缀。 -
原因:
ng-model
和data-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属性。
- 这使得你的html有效,这意味着它可以被基于html(基于服务器)的parsing器使用,如domdocument(php)或其他。 这些parsing器经常在格式不正确的html上失败。
- Angular规范化属性,但请记住,这是在客户端,而不是在服务器上。