web-dev-qa-db-ja.com

ディレクティブの「ターミナル」を理解する方法は?

このページ: http://docs.angularjs.org/guide/directive

ディレクティブ定義オブジェクト

ターミナル

Trueに設定されている場合、現在の優先順位は、実行されるディレクティブの最後のセットになります(同じ優先順位での実行順序が定義されていないため、現在の優先順位のディレクティブは引き続き実行されます)。

よくわかりません。 current priority意味?そのようなディレクティブがある場合:

  1. ディレクティブ1、{優先度:1、端末:false}
  2. ディレクティブ2({優先度:10、端末:false})
  3. directive3に{priority:100、terminal:false}
  4. directive4 with {priority:100、terminal:true} //これはtrue
  5. ディレクティブ5の{priority:1000、terminal:false}

directive4terminal:trueおよびその他にはfalseがあります。

Htmlタグがある場合、5つのディレクティブがすべてあります:

<div directive1 directive2 directive3 directive4 directive5></div>

5つのディレクティブの実行順序は何ですか?

64
Freewind

優先度

優先順位は、1つの要素に複数のディレクティブがある場合にのみ関係します。優先度は、これらのディレクティブが適用/開始される順序を決定します。ほとんどの場合、優先順位は必要ありませんが、コンパイル機能を使用するときに、コンパイル機能が最初に実行されることを確認したい場合があります。

端末

端末プロパティは、同じHTML要素にあるディレクティブにのみ関連します。つまり、ディレクティブに<div my-directive1></div> <div my-directive2></div>priorityおよびterminalが含まれている場合、my-directive1my-directive2は互いに影響しません。 <div my-directive1 my-directive2></div>がある場合にのみ、相互に影響します。

端末プロパティは、Angularに、その要素に続くすべてのディレクティブをスキップするように指示します(優先順位は低い)。したがって、このコードはそれをクリアするかもしれません。

myModule.directive('myDirective1', function() {
    return {
        priority: 1,
        terminal: false,
        link: function() {
            console.log("I'm myDirective1");
        }
    }
});

myModule.directive('myDirective2', function() {
    return {
        priority: 10,
        terminal: true,
        link: function() {
            console.log("I'm myDirective2");
        }
    }
});

myModule.directive('myDirective3', function() {
    return {
        priority: 100,
        terminal: false,
        link: function() {
            console.log("I'm myDirective3");
        }
    }
});

このため、コンソールには「I'm myDirective2」と「I'm myDirective3」しか表示されません。

<div my-directive1 my-directive2 my-directive3></div>

ただし、この場合、「I'm myDirective1」も表示されます。これらは異なる要素にあるためです。

<div my-directive1></div>
<div my-directive2></div>
<div my-directive3></div>

元の投稿

あなたの例では、優先度100と1000のディレクティブのみが適用されます。優先度の高いディレクティブが最初に適用され、優先度1000のディレクティブが最初に適用されるためです。

この場合、優先度100のディレクティブが2つある場合、同じ優先度のディレクティブの順序は定義されていないため、両方とも適用されます。

これは、同じ要素にあるディレクティブにのみ適用されることに注意してください。

146
Anders Ekdahl