4

ページ上の複数の要素にまたがる複数のディレクティブがある場合、Angular の HTML コンパイラはコンパイルの順序をどのように調整しますか?

次のマークアップがあるとします。アルファ、ベータ、ガンマはカスタム Angular ディレクティブです。

<html ng-app>
  <alpha><beta></beta></alpha>
  <gamma></gamma>
</html>

コンパイラがそれらを処理する順序は何ですか? アルファ=>ガンマ=>ベータですか?それともアルファ=>ベータ=>ガンマですか?

もう少し複雑にするために、alpha ディレクティブのテンプレートに foo という別のカスタム ディレクティブがあるとします。foo はいつコンパイルされますか? 上記のすべてのディレクティブがコンパイルされた後? それともアルファがコンパイルされた直後ですか?

4

3 に答える 3

3

AngularJS メーリング リストで同じ質問をしたところ、Peter Bacon Darwin がデモ用の jsfiddle ですばらしい回答をくれました。リンク

于 2013-02-23T19:46:52.073 に答える
1

1 つの要素に対する複数のディレクティブについて:

これは、ディレクティブの「priority」プロパティを使用して処理されます。ドキュメントから:Once all directives for a given DOM element have been identified they are sorted by priority and their compile() functions are executed.

http://docs.angularjs.org/guide/directiveを参照してください

ディレクティブのコンパイル順序について:

Angular は DOM をトラバースします。つまり、DOM ツリーに表示される順序で要素を取得します。ドキュメントから:Compile: traverse the DOM and collect all of the directives. The result is a linking function.

http://docs.angularjs.org/guide/compilerを参照してください

于 2013-02-20T22:42:23.757 に答える
0

リンク関数とコンパイル関数の順序は、他の回答と、https : //docs.angularjs.org/api/ng/service/$compile の $compile 関数の Angular ドキュメントで詳しく説明されています。

  1. トップダウンでコンパイルおよび事前リンク (最初に親、次に子)
  2. 逆にリンクを投稿する
  3. 同じ要素のディレクティブは優先度属性によって処理されます

さらに: 4.ディレクティブでtemplateUrlオプションを使用すると、そのディレクティブはテンプレートが読み込まれるまでコンパイルされませんが、コンパイラは他のディレクティブのコンパイルを続行します。これにより、上記のコンパイル/リンクの順序が崩れます。

于 2015-01-23T10:33:30.703 に答える