Reihenfolge der Kompilierung und Verknüpfung für mehrere Attributzuweisungen in AngularJS?

8

Angenommen, ich habe zwei Attribut-Anweisungen namens myFoo und myBar . Diese Direktiven sind mit restrict: 'A' definiert.

Dann habe ich ein Element

%Vor%

In welcher Reihenfolge würden die Kompilierungs- / Verknüpfungsfunktionen aufgerufen werden? Wird my-foo immer vor dem Kompilieren von my-bar kompiliert?

    
user4643472 15.11.2015, 08:31
quelle

2 Antworten

5

Zusätzlich zu @ valepus Antwort hier ist die Beschreibung für die Eigenschaft priority für das DDO (Directive Definition Object):

TL; DR Der Standardwert priority ist 0 . Wenn Sie die Reihenfolge ändern möchten, in der Elemente kompiliert werden, müssen Sie priority für das Element (s ).

  

Wenn für ein einzelnes DOM-Element mehrere Direktiven definiert sind,   Manchmal ist es notwendig, die Reihenfolge der Richtlinien anzugeben   werden angewendet. Die Priorität wird verwendet, um die Direktiven vor ihren zu sortieren   Kompilierfunktionen werden aufgerufen. Priorität ist als Nummer definiert.   Richtlinien mit höherer numerischer Priorität werden zuerst kompiliert.   Pre-Link-Funktionen werden auch in der Reihenfolge der Priorität ausgeführt, aber nach dem Link   Funktionen werden in umgekehrter Reihenfolge ausgeführt. Die Reihenfolge der Richtlinien mit dem   dieselbe Priorität ist undefiniert. Die Standardpriorität ist 0.

Wenn Sie in Ihrem Fall nicht priority für Ihre Anweisungen angeben, wird my-bar zuerst kompiliert, gefolgt von my-foo . Beachten Sie jedoch, dass der Controller zuerst initialisiert wird, dann der pre gefolgt von der post link-Funktion. Auch hier ist die Reihenfolge wichtig: Angular setzt die Anweisungen abwechselnd zusammen. Das Folgende ist mein console.log Drucken, das den Prozess zeigt:

%Vor%

Wenn Sie gerne spielen möchten, habe ich einen Plunker eingerichtet.

Wenn Sie jetzt priority in priority: 1 ändern, erhalten Sie folgende Ausgabe:

%Vor%

Wie Sie sehen, beginnt es mit myFoo und geht weiter mit myBar . So hat myFoo jetzt eine höhere Priorität.

Update 1

Frage:

  

Wie gehen Sie mit einer Sitation um, bei der zwei verschiedene Herstellerrichtlinien (A und B) voneinander abhängen und die Reihenfolge der Ausführung wichtig ist? Ist es möglich, ohne die vedor Einstellungen zu ändern?

Ich würde vorschlagen, einen Dekorator wie folgt zu implementieren:

%Vor%

Normalerweise fängt ein Dekorator die Erstellung eines Dienstes ab, wodurch er das Verhalten eines Dienstes überschreiben oder ändern kann. Sie können Ihre Anweisung jedoch auch wie oben dargestellt dekorieren. Im Decorator können Sie die Priorität auf Ihre Bedürfnisse festlegen, um die Reihenfolge der Ausführung zu bewirken. Soweit ich weiß, ist die Eigenschaft priority die einzige Möglichkeit, die Reihenfolge zu steuern, in der die Anweisungen angewendet werden. Wenn Sie einen Decorator verwenden, ändern / überschreiben Sie die Eigenschaft priority , aber nicht direkt deren Einstellungen, falls Sie nicht DDO meinen.

Der Plunker oben wird ebenfalls mit der Decorator-Implementierung aktualisiert.

    
LordTribual 15.11.2015, 08:51
quelle
3

Nein, Direktiven haben ein Feld namens "priority", das angular angibt, wann sie kompiliert werden müssen. Je größer die Priorität, desto früher werden sie zusammengestellt. In Ihrem Fall werden die Direktiven immer in der gleichen Reihenfolge kompiliert (egal wie Sie sie in das Tag schreiben) und diese Reihenfolge hängt von ihrem Prioritätsfeld ab (Standard ist 0).

von Ссылка

  

Priorität

     

Wenn für ein einzelnes DOM-Element mehrere Direktiven definiert sind,   Manchmal ist es notwendig, die Reihenfolge der Richtlinien anzugeben   werden angewendet. Die Priorität wird verwendet, um die Direktiven vor ihren zu sortieren   Kompilierfunktionen werden aufgerufen. Priorität ist als Nummer definiert.   Richtlinien mit höherer numerischer Priorität werden zuerst kompiliert.   Pre-Link-Funktionen werden auch in der Reihenfolge der Priorität ausgeführt, aber nach dem Link   Funktionen werden in umgekehrter Reihenfolge ausgeführt. Die Reihenfolge der Richtlinien mit dem   dieselbe Priorität ist undefiniert. Die Standardpriorität ist 0.

%Vor%

Dieser Artikel scheint recht gut zu erklären, wie die Priorität in verschiedenen Fällen funktioniert: Ссылка

    
valepu 15.11.2015 08:38
quelle

Tags und Links