我目前正在看这个入门教程视频angular.js
在某个时刻(在 12'40" 之后),演讲者指出标签内的属性ng-app
和data-ng-app=""
或多或少是等效的,而和也是如此。但是演讲者说 html 将通过不同的验证器进行验证,具体取决于哪个属性是用过的。<html>
ng-model="my_data_binding
data-ng-model="my_data_binding"
你能解释一下这两种方式之间的区别吗,ng-
前缀对data-ng-
前缀?
好问题。区别很简单——两者之间绝对没有区别,只是某些 HTML5 验证器会在属性上抛出错误ng-app
,但它们不会对任何前缀为 的东西抛出错误data-
,比如data-ng-app
.
因此,要回答您的问题,data-ng-app
如果您想更轻松地验证您的 HTML,请使用。
有趣的事实:您也可以使用x-ng-app
相同的效果。
Angular 对元素的标签和属性名称进行规范化,以确定哪些元素与哪些指令匹配。我们通常通过区分大小写的驼峰式规范化名称(例如 ngModel)来引用指令。然而,由于 HTML 不区分大小写,我们在 DOM 中以小写形式引用指令,通常在 DOM 元素上使用破折号分隔的属性(例如 ng-model)。
规范化过程如下:
从元素/属性的前面去除 x- 和 data-。将 :、- 或 _ 分隔的名称转换为 camelCase。以下是与 ngBind 匹配的元素的一些等效示例:
基于上面的陈述,下面都是有效的指令
1. ng-bind
2. ng:bind
3. ng_bind
4. data-ng-bind
5. x-ng-bind
不同之处在于自定义data-*
属性在HTML5 规范中有效。因此,如果您需要验证您的标记,您应该使用它们而不是ng
属性。
ng-model
并且data-ng-model
是相同的和等价的!
原因: data-
前缀
HTML5 规范要求任何自定义属性都以data-
.
理由:两者ng-model
和data-ng-model
相同且等价。
AngularJS 文档 - 规范化
Angular 规范化元素的标签和属性名称,以确定哪些元素匹配哪些指令。我们通常通过区分大小写的驼峰式规范化名称(例如ngModel
)来引用指令。然而,由于 HTML 不区分大小写,我们在 DOM 中以小写形式引用指令,通常在 DOM 元素上使用破折号分隔的属性(例如ng-model
)。
规范化过程如下: 1.从元素/属性的前面
剥离x-
和。 2. 将、或- 分隔的名称转换为. 例如data-
:
-
_
camelCase
以下形式都是等效的并且匹配 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 属性。