66

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

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

ターミナル

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

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

  1. {優先度: 1、ターミナル: false} のディレクティブ 1
  2. {優先度: 10、ターミナル: false} のディレクティブ 2
  3. {優先度: 100、ターミナル: false} のディレクティブ 3
  4. Directive4 with { 優先度: 100, 端末: true} // これは true
  5. {優先度: 1000、ターミナル: false} のディレクティブ 5

有・他有に注意しdirective4てください。terminal:truefalse

html タグがある場合、5 つのディレクティブがすべて含まれます。

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

5 つのディレクティブの実行順序は?

4

1 に答える 1

150

優先順位

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

「ターミナル」

また、端末プロパティは、同じ HTML 要素にあるディレクティブにのみ関連します。つまり、ディレクティブに とがあり<div my-directive1></div> <div my-directive2></div>、互いに影響を与えない場合です。あなたが持っている場合にのみ、それらは互いに影響します。priorityterminalmy-directive1my-directive2<div my-directive1 my-directive2></div>

terminal プロパティは、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 つある場合、同じ優先度のディレクティブの順序が定義されていないため、両方が適用されます。

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

于 2013-03-07T09:06:28.703 に答える