AngularJS - innere Anweisung - Die Reihenfolge der postLink-Funktionsaufrufe ändert sich, wenn ich die Vorlageneigenschaft durch die Eigenschaft templateUrl ersetze

8

Ich habe eine komische Situation. Wenn ich eine äußere Direktive habe, die 2 Direktiven enthält

inner-directive1 - hat eine Vorlage definiert.

inner-directive2 - hat eine templateUrl definiert.

Die postLink-Funktion von inner-directive1 wird vor der postlink-Funktion der äußeren Direktive aufgerufen - wie erwartet.

Aber die poslink Funktion von inner-directive2 wird nach der äußeren Anweisung postLink aufgerufen - NICHT wie erwartet.

Die Aufrufe der postLink-Funktion sind: innere-direktive1, äußere-direktive, innere-direktive2 und ich erwartete: innere-direktive1, innere-direktive2, äußere-direktive .

Die Vorlage für die äußere Anweisung lautet:

%Vor%

sehen Sie sich bitte die JsFiddle

an

Kennt jemand den Grund warum? Und gibt es eine Möglichkeit, wie es funktionieren kann, wie es erwartet wird?

JSFiddle - Bitte schauen Sie sich das Konsolenprotokoll an. Vielen Dank, Ben

    
Ben Laniado 19.10.2013, 20:15
quelle

2 Antworten

10

Hier ist der Grund, warum aus den Anweisungen der Angular-Direktive ( Ссылка ):

  

templateUrl - Wie Vorlage, aber die Vorlage wird von der angegebenen URL geladen. Da das Laden der Vorlage asynchron ist, wird die Kompilierung / Verknüpfung solange ausgesetzt, bis die Vorlage geladen ist.

Diese spezielle Anweisung stoppt also die Verknüpfung, bis Ihre Vorlage geladen ist. Während dieser Zeit springen deine anderen Anweisungen ein und laufen.

Wenn das Timing Ihrer Link-Funktion kritisch ist, müssen Sie die Vorlage direkt anstelle von templateUrl einfügen. Es sei denn, jemand kann sich einen coolen Weg einfallen lassen.

    
KayakDave 19.10.2013 22:02
quelle
1

Ich bin mir nicht sicher über den genauen Anwendungsfall, aber ich stieß auf dieses Problem, als ich versuchte, element [0] .querySelector ('# dynamicId');

zu verwenden

Dies würde in diesem Fall zu "null" führen, da die Link-Funktion von der Eingabe 1 nach der äußeren Verknüpfung ausgeführt wurde.

Die Korrektur war ziemlich einfach, in der Verknüpfungsfunktion der äußeren Anweisung den Code mit element.ready () umhüllen:

%Vor%

Dadurch kann ich das dynamische Element finden und alle Ereignisse anhängen, selbst wenn es asynchron aus der Vorlagen-URL geladen wird.

    
Donald White 11.11.2014 00:22
quelle