ng-appとdata-ng-appの違いは何ですか?


230

私は現在、このスタートチュートリアルビデオを見ていますangular.js

いくつかの時点では、属性という話状態、(12'40"後)ng-appdata-ng-app=""、多かれ少なかれ同等の内部にある<html>ので、タグ、およびがあるng-model="my_data_bindingdata-ng-model="my_data_binding"しかし、話者がHTMLである属性に応じて、異なるバリデータによって検証されるだろうと言います。中古。

ng-接頭辞に対するdata-ng-接頭辞の2つの方法の違いを説明できますか?


回答:


403

良い質問。違いは単純です。2つの違いはまったくありません。ただし、特定のHTML5バリデーターはなどのプロパティでng-appエラーをスローしますがdata-、などの接頭辞が付いたものについてはエラーをスローしませんdata-ng-app

したがって、質問に答えるには、data-ng-appHTMLの検証をもう少し簡単にしたい場合に使用します。

面白い事実:x-ng-app同じ効果を使用することもできます。


4
data-接頭辞により、ng属性が正しく機能しなくなりますか?(例えば、 "data-ng-repeat")?
tonejac 2015

3
これは、手動で取り除くにCPUサイクルのような無駄のように思えるdata-x-。HTML検証ルールを変更して、ng-ものを受け入れることができないのはなぜですか?
DaveAlger、2015年


1
@DaveAlger:あなたが言ったようにするのは悪い考えです。そこにAngularのようにさまざまなプレフィックスが付いた有名なツールがたくさんある場合は、HTMLに従ってすべてのプレフィックスを追加する必要があります?!?!クルミアが言ったように、それはHTMLを拡張する方法です。
Dassi Orleando 2016

65

Angularjsドキュメントから

Angularは、要素のタグと属性名を正規化して、どの要素がどのディレクティブに一致するかを決定します。通常、ディレクティブは、大文字と小文字を区別するcamelCase正規化名(ngModelなど)で参照します。ただし、HTMLでは大文字と小文字が区別されないため、通常はDOM要素(ng-modelなど)のダッシュ区切りの属性を使用して、小文字の形式でDOMのディレクティブを参照します。

正規化プロセスは次のとおりです。

要素/属性の前部からx-とdata-を取り除きます。:、-、または_で区切られた名前をcamelCaseに変換します。以下は、ngBindに一致する要素の同等の例です。

上記のステートメントに基づいて、すべてが有効なディレクティブです

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


ただし、これはディレクティブ名と比較するためだけに行われます。実際の属性は変更されません。
RetroCoder 2014年

3
-、:および_表記について知っておくとよい
コードウィスパー14

29

違いは、カスタムdata-*属性がHTML5仕様で有効であることです。したがって、マークアップを検証する必要がある場合は、ng属性ではなくマークアップを使用する必要があります。


1
仕様から、data- *はhtmlを検証するだけで機能することを理解しています。しかし、なぜx- *が機能するのでしょうか?仕様では、これについての説明はありません。
Bhramar

1
x- *はブラウザで使用するために予約されています。WHY xが機能するという質問に関しては、どちらもAngularとして機能し、フレームワークにコーディングすることにより、どちらかのdata / xで確実に機能するようにします。なぜxが角度で機能するのかを尋ねる場合、それは別の議論です。どちらにも良い議論があります。SOでこの回答を参照してください:stackoverflow.com/a/17902387/339803そのページの他の回答は、xはXHTML用であると考えているようですが、よくわかりません。それをすべて読んだ後、それから何ができるかを見てください。HTML5仕様では、ブラウザー/ベンダーの使用も述べています:w3.org/html/wg/drafts/html/master/single-page.html
redfox05

15

短い答え:

ng-modeldata-ng-model同じで同等です!


どうして?

  1. 理由: data-プレフィックス
    HTML5仕様では、カスタム属性の前にを付ける必要がありdata-ます。

  2. :理由の両方ng-modeldata-ng-model同じと等価です。

AngularJSドキュメント-正規化

Angularは、要素のタグと属性名を正規化して、どの要素がどのディレクティブに一致するかを決定します。通常、ディレクティブは、大文字と小文字を区別する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>

2

ページのHTMLを有効にする場合は、ng-の代わりにdata-ng-を使用できます。


2
OPは、これらが交換可能に使用できることを理解していますが、「同じように機能する」場合に2つが利用できる理由を知りたいと考えています。それらの違いを説明することは、より価値のある答えになると思います。
チャールズワトソン

1

ブラウザーに提供する前にサーバー上のhtmlまたはhtml-fragmentsを操作する場合は、ng-xxx属性ではなくdata-ng-xxx属性を使用することをお勧めします。

  1. htmlを有効にします。つまり、domdocument(php)などのhtml(サーバーベース)パーサーで使用できます。これらのパーサーは、整形式ではないhtmlで失敗することがよくあります。
  2. Angularは属性を正規化しますが、それはサーバー上ではなくクライアント上にあることを覚えておいてください。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.