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

Ste*_*and 227 html5 angularjs

目前,我在看这个入门教程视频angular.js

在某个时刻(12'40"之后),说话者声明属性ng-app并且data-ng-app=""<html>标签内部或多或少相同,所以是ng-model="my_data_bindingdata-ng-model="my_data_binding".但是说话者说html将通过不同的验证器验证,具体取决于哪个属性是用过的.

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

Cod*_*rer 401

好问题.区别很简单 - 两者之间绝对没有区别,除了某些HTML5验证器会在类似的属性上抛出错误ng-app,但它们不会为任何带前缀的东西抛出错误data-,例如data-ng-app.

因此,要回答您的问题,请使用,data-ng-app如果您希望验证HTML更容易一些.

有趣的事实:你也可以使用x-ng-app相同的效果.

  • @DaveAlger:[`data-*`属性是扩展HTML的方式](https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Using_data_attributes). (8认同)
  • 数据前缀是否会阻止ng属性正常工作?(例如,"data-ng-repeat")? (4认同)
  • 手动剥离`data -`和`x-`似乎浪费了CPU周期.为什么不能将HTML验证规则更改为接受`ng -`的东西? (2认同)
  • @DaveAlger:按照你所说的去做是一个坏主意。如果有很多像 Angular 这样的著名工具具有不同的前缀,您希望 HTML 跟随它们添加它们的前缀?!?!正如 Krumia 所说,这是扩展 HTML 的方式。 (2认同)

小智 63

来自Angularjs文档

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

规范化过程如下:

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

基于以上陈述,所有都是有效的指令

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

  • 很高兴知道 - ,和_符号 (3认同)

Man*_*ntz 29

不同之处在于自定义data-*属性在HTML5规范中有效.因此,如果您需要验证标记,则应使用它们而不是ng属性.


Edd*_*ddy 13

简答:

ng-model并且data-ng-model是相同的!


为什么?

  1. 原因: data-前缀
    HTML5规范要求任何自定义属性都有前缀data-.

  2. 原因:这两个ng-modeldata-ng-model是相同的,等价的.

AngularJS文档 - 规范化

角度规范化元素的标记和属性名称,以确定哪些元素与哪些指令匹配.我们通常通过其区分大小写的camelCase规范化名称来引用指令(例如ngModel).但是,由于HTML不区分大小写,我们通过小写形式引用DOM中的指令,通常使用DOM元素上的划线分隔属性(例如ng-model).

归一化处理是如下:
1.剥去x-data-从元件的前/属性.
2.转换的:,-_-delimited名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>
Run Code Online (Sandbox Code Playgroud)