Comment comprendre le `terminal` de la directive?

Dans cette page: http://docs.angularjs.org/guide/directive

Objet de définition de directive

Terminal

Si la valeur est true, la priorité actuelle sera le dernier ensemble de directives à exécuter (toutes les directives à la priorité actuelle seront toujours exécutées car l’ordre d’exécution sur la même priorité n’est pas défini).

Je ne comprends pas bien. Que signifie current priority ? S’il y a de telles directives:

  1. directive1 avec {priority: 1, terminal: false}
  2. directive2 avec {priorité: 10, terminal: faux}
  3. directive3 avec {priority: 100, terminal: false}
  4. directive4 avec {priorit: 100, terminal: true} // ceci est vrai
  5. directive5 avec {priorit: 1000, terminal: false}

Veuillez noter que la directive4 a un terminal:true et les autres ont un false .

Si une balise html contient toutes les 5 directives:

 

Quel est l’ordre d’exécution des 5 directives?

Priorité

La priorité n’est pertinente que lorsque vous avez plusieurs directives sur un élément. La priorité détermine dans quel ordre ces directives seront appliquées / démarrées. Dans la plupart des cas, vous n’avez pas besoin de priorité, mais parfois, lorsque vous utilisez la fonction de compilation, vous voulez vous assurer que votre fonction de compilation s’exécute en premier.

Terminal

La propriété terminal ne concerne également que les directives se trouvant sur le même élément HTML. Autrement dit, si vous avez

, la priority et le terminal dans vos directives my-directive1 et my-directive2 ne s’affecteront pas. Ils ne s’affecteront que si vous avez

.

La propriété terminal indique à Angular de sauter toutes les directives sur l’élément qui vient après (priorité inférieure). Donc, ce code peut effacer:

 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"); } } }); 

Pour cela, vous ne voyez que “I’m myDirective2” et “I’m myDirective3” dans la console.

 

Mais pour cela, vous verriez aussi “I’m myDirective1”, car ils se trouvent sur des éléments différents.

 

Poste d’origine

Dans votre exemple, les directives avec la priorité 100 et 1000 sont les seules qui seront appliquées, car une directive avec une priorité plus élevée est appliquée en premier, donc celle avec la priorité 1000 sera appliquée en premier.

Si vous avez deux directives avec la priorité 100 dans ce cas, les deux seront appliquées car l’ordre des directives ayant la même priorité est indéfini.

Notez que cela s’applique uniquement aux directives qui se trouvent sur le même élément.