标记内或多或少是等价的,ng-model="my_data_binding 和 data-ng-model="my_data_binding" 也是如此。但是说话者表示 html ......" /> 标记内或多或少是等价的,ng-model="my_data_binding 和 data-ng-model="my_data_binding" 也是如此。但是说话者表示 html ......"> 标记内或多或少是等价的,ng-model="my_data_binding 和 data-ng-model="my_data_binding" 也是如此。但是说话者表示 html ......" />
ChatGPT解决这个技术问题 Extra ChatGPT

ng-app vs. data-ng-app,有什么区别?

我目前正在为 angular.js 寻找 this start tutorial video

在某个时刻(12'40" 之后),说话者指出属性 ng-appdata-ng-app=""<html> 标记内或多或少是等价的,ng-model="my_data_bindingdata-ng-model="my_data_binding" 也是如此。但是说话者表示 html 将通过不同的验证器进行验证,具体取决于使用的属性。

您能解释一下 ng- 前缀与 data-ng- 前缀这两种方式之间的区别吗?


t
tgf

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

因此,要回答您的问题,如果您希望更轻松地验证您的 HTML,请使用 data-ng-app

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


data- 前缀会阻止 ng 属性正常工作吗? (例如,“data-ng-repeat”)?
手动剥离 data-x- 似乎浪费了 CPU 周期。为什么不能将 HTML 验证规则更改为接受 ng- 内容?
@DaveAlger:按照你说的做是个坏主意。如果外面有很多像 Angular 这样的著名工具,它们有不同的前缀,你希望 HTML 跟随它们来添加它们的前缀?!?!正如 Krumia 所说,这是扩展 HTML 的方式。
B
Benjamin Trent

来自Angularjs Documentation

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


但它这样做只是为了与指令名称进行比较。它不会改变实际属性。
很高兴了解 -,: 和 _ 符号
M
Manu Clementz

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


我从规范中了解到 data-* 会起作用,因为它只是验证 html。但是为什么 x-* 会起作用呢?他们在规范中对此没有任何描述。
x-* 保留供浏览器使用。至于你为什么 x 工作的问题,要么将作为角度工作,特别是通过将其编码到它们的框架中来确保它适用于任一 data/x。如果您问为什么 x 对 Angular 起作用,那是另一场辩论。两者都有很好的论据。请在 SO 上查看此答案:stackoverflow.com/a/17902387/339803 该页面上的另一个答案似乎认为 x 用于 XHTML,但我不确定。在阅读完所有内容后,看看你能做些什么。 HTML5 规范还说浏览器/供应商使用:w3.org/html/wg/drafts/html/master/single-page.html
E
Eddy

简短的回答:

ng-modeldata-ng-model 相同且等价!

为什么?

原因:data- 前缀 HTML5 规范要求任何自定义属性都以 data- 为前缀。原因: ng-model 和 data-ng-model 都是相同且等效的。

AngularJS 文档 - 规范化 Angular 规范化元素的标签和属性名称,以确定哪些元素匹配哪些指令。我们通常通过区分大小写的驼峰式规范化名称(例如 ngModel)来引用指令。然而,由于 HTML 不区分大小写,我们在 DOM 中以小写形式引用指令,通常在 DOM 元素上使用破折号分隔的属性(例如 ng-model)。规范化过程如下: 1. 从元素/属性的前面去除 x- 和 data-。 2. 将 :, -, or_-delimited name 转换为 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>

M
Mistalis

如果要使页面 HTML 有效,可以使用 data-ng- 而不是 ng-。


OP 知道它们可以互换使用,但希望知道如果它们“相同”工作,为什么它们可以使用。我相信解释是什么让它们与众不同将是一个更有价值的答案。
K
Kees Hessels

如果您想在将其提供给浏览器之前在服务器上操作 html 或 html-fragments,那么您肯定希望使用 data-ng-xxx 属性而不仅仅是 ng-xxx 属性。

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