64 votes

Comment comprendre le `terminal` de directive?

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

La Directive Définition De L'Objet

terminal

Si défini à true, alors la priorité sera la dernière série de directives qui sera execute (toutes les directives relatives à la priorité actuelle exécute tout de même que l'ordre d'exécution sur la même priorité n'est pas défini).

Je ne comprends pas bien. Qu'est - current priority moyenne? Si il ya de telles directives:

  1. directive1 relative avec { priorité: 1, le terminal: false}
  2. directive2 avec { priorité: 10, terminal: false}
  3. directive3 avec { priorité: 100, terminal: false}
  4. directive4 avec { priorité: 100, terminal: true} // c'est vrai
  5. directive5 avec { priorité: 1000, le terminal: false}

Veuillez noter que l' directive4 a terminal:true et d'autres ont false.

Si il y a une balise html a tous les 5 directives:

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

Quel est l'ordre d'exécution de l'5 directives?

147voto

Anders Ekdahl Points 5678

Priorité

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

Terminal

Le terminal de la propriété est également à seulement pertinente pour les directives qui se trouvent sur le même élément HTML. C'est, si vous avez <div my-directive1></div> <div my-directive2></div>, priority et terminal dans vos directives my-directive1 et my-directive2 n'affectera pas les uns les autres. Ils n'affectent les uns les autres si vous avez <div my-directive1 my-directive2></div>.

Le terminal de propriété dit Angulaire de sauter toutes les directives sur l'élément qui vient après lui (faible priorité). Donc, ce code pourrait clair:

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 consultez "je suis myDirective2" et "je suis myDirective3" dans la console.

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

Mais pour cela, vous pouvez voir "je suis myDirective1" ainsi, puisqu'ils sont sur différents éléments.

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

Post Original

Dans votre exemple, les directives de priorité, avec 100 et 1000 sont les seuls qui sera appliqué, depuis une directive de plus haute priorité sont appliqués d'abord, donc la seule priorité 1000 sera d'abord appliquée.

Si vous avez deux directives, la priorité 100 dans ce cas, les deux d'entre eux seront appliquées parce que l'ordre des directives avec la même priorité n'est pas défini.

Notez que cela s'applique uniquement aux directives qui sont sur le même élément.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X