Auf dieser Seite: http://docs.angularjs.org/guide/directive
Direktive Definition Objekt
terminal
Wenn true festgelegt ist, ist die aktuelle Priorität die letzte auszuführende Anweisungsgruppe (alle Anweisungen mit der aktuellen Priorität werden weiterhin ausgeführt, da die Ausführungsreihenfolge für dieselbe Priorität nicht definiert ist).
Ich verstehe es nicht gut. Was macht current priority
bedeuten? Wenn es solche Richtlinien gibt:
Bitte beachten Sie die directive4
hat terminal:true
und andere haben false
.
Wenn es ein HTML-Tag gibt, enthält es alle 5 Anweisungen:
<div directive1 directive2 directive3 directive4 directive5></div>
Wie ist die Ausführungsreihenfolge der 5 Anweisungen?
Priorität
Die Priorität ist nur relevant, wenn Sie mehrere Anweisungen für ein Element haben. Die Priorität bestimmt, in welcher Reihenfolge diese Richtlinien angewendet/gestartet werden. In den meisten Fällen benötigen Sie keine Priorität. Wenn Sie jedoch die Kompilierungsfunktion verwenden, möchten Sie manchmal sicherstellen, dass Ihre Kompilierungsfunktion zuerst ausgeführt wird.
Terminal
Die Eigenschaft terminal ist auch nur für Direktiven relevant, die sich auf demselben HTML-Element befinden. Das heißt, wenn Sie <div my-directive1></div> <div my-directive2></div>
Haben, beeinflussen sich priority
und terminal
in Ihren Anweisungen my-directive1
Und my-directive2
Nicht gegenseitig. Sie beeinflussen sich nur, wenn Sie <div my-directive1 my-directive2></div>
Haben.
Die terminal -Eigenschaft weist Angular an, alle Direktiven für das nachfolgende Element zu überspringen (niedrigere Priorität). Dieser Code kann es also aufklären:
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");
}
}
});
In der Konsole wird nur "I'm myDirective2" und "I'm myDirective3" angezeigt.
<div my-directive1 my-directive2 my-directive3></div>
Aber dafür würde man auch "I'm myDirective1" sehen, da sie sich auf verschiedene Elemente beziehen.
<div my-directive1></div>
<div my-directive2></div>
<div my-directive3></div>
Originalbeitrag
In Ihrem Beispiel werden nur die Anweisungen mit den Prioritäten 100 und 1000 angewendet, da eine Anweisung mit höherer Priorität zuerst angewendet wird. Die Anweisung mit der Priorität 1000 wird also zuerst angewendet.
Wenn Sie in diesem Fall zwei Direktiven mit der Priorität 100 haben, werden beide angewendet, da die Reihenfolge der Direktiven mit der gleichen Priorität undefiniert ist.
Beachten Sie, dass dies nur für Direktiven gilt, die sich auf demselben Element befinden.