angularjs angularjs-directive

angularjs - ng-src



¿Cómo entender el `terminal` de la directiva? (1)

En esta página: http://docs.angularjs.org/guide/directive

Objeto de definición de directiva

terminal

Si se establece en verdadero, la prioridad actual será el último conjunto de directivas que se ejecutará (cualquier directiva en la prioridad actual se ejecutará aún cuando el orden de ejecución en la misma prioridad no esté definido).

No lo entiendo bien ¿Qué significa current priority ? Si hay tales directivas:

  1. directiva1 con {prioridad: 1, terminal: falso}
  2. directiva2 con {prioridad: 10, terminal: falso}
  3. directiva3 con {prioridad: 100, terminal: falso}
  4. directiva4 con {prioridad: 100, terminal: verdadero} // esto es cierto
  5. directiva5 con {prioridad: 1000, terminal: falso}

Tenga en cuenta que la directive4 tiene terminal:true y otros tienen false .

Si hay una etiqueta html, tiene todas las 5 directivas:

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

¿Cuál es el orden de ejecución de las 5 directivas?


Prioridad

La prioridad solo es relevante cuando tienes múltiples directivas en un elemento. La prioridad determina en qué orden esas directivas serán aplicadas / iniciadas. En la mayoría de los casos, no necesita una prioridad, pero a veces, cuando usa la función de compilación, quiere asegurarse de que su función de compilación se ejecute primero.

Terminal

La propiedad de la terminal también solo es relevante para las directivas que están en el mismo elemento HTML. Es decir, si tiene <div my-directive1></div> <div my-directive2></div> , priority y terminal en sus directivas my-directive1 y my-directive2 no se afectarán entre sí. Solo se afectarán entre sí si tiene <div my-directive1 my-directive2></div> .

La propiedad de la terminal le dice a Angular que omita todas las directivas sobre ese elemento que viene después (prioridad más baja). Entonces este código podría aclararlo:

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

Para esto, solo vería "I''m myDirective2" y "I''m myDirective3" en la consola.

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

Pero para esto, verías "I''m myDirective1" también, ya que están en diferentes elementos.

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

Publicación original

En su ejemplo, las directivas con prioridad 100 y 1000 son las únicas que se aplicarán, ya que una directiva con mayor prioridad se aplica primero, por lo que se aplicará primero la que tenga prioridad 1000.

Si tiene dos directivas con prioridad 100 en este caso, ambas se aplicarán porque el orden de las directivas con la misma prioridad no está definido.

Tenga en cuenta que esto solo se aplica a las directivas que están en el mismo elemento.