Direktive Link Funktion Ausführungsreihenfolge

8

Ich bin irgendwie neu in all diesen eckigen ...

Ich habe eine benutzerdefinierte Anweisung, nennen wir es myDar. Innerhalb dieser Direktive definiere ich eine Link-Funktion. In meinem HTML möchte ich mehrere verschachtelte Tags dieser Direktive wie folgt verwenden:

%Vor%

Ich möchte zuerst die Verknüpfungsfunktion von "outer" ausführen. Wie mache ich das?

Das ist die allgemeine Frage. Wenn es dann hilft, was ich wirklich versuche, ist es, Direktiven zu erstellen, die jquery ui layout ( Link zur Website ) umbrechen. . Also habe ich eine Direktive für "ui-layout" und Direktiven für "center", "west" usw. In der "ui-layout" -Richtlinie rufe ich $(tElm).layout(options) auf. Ich habe ein Problem beim Erstellen eines verschachtelten Layouts:

%Vor%

Angular führt zuerst die Link-Funktion der inneren "ui-layout" -Direktive aus, aber damit das jquery ui-Layout-Plugin funktioniert, muss $(tElm).layout(options) der äußeren zuerst aufgerufen werden, andernfalls wird das Layout nicht korrekt dargestellt.

    
julius_am 15.01.2014, 15:49
quelle

2 Antworten

8

Dafür werden Sie den Controller der Direktive nutzen. Es wird eine Klasse sein, die eine Methode definiert, um verschachtelte Controller zu registrieren, und eine weitere, um den gewünschten Befehl (hier $(...).layout(...) ) für dieses Element und dann für alle untergeordneten Elemente auszuführen . Das bedeutet, dass die äußere Richtlinie für die Koordination der Erstellung der Layouts verantwortlich ist.

Der vollständige Beispielcode lautet:

%Vor%

Ersetzen Sie die Zeile console.log("PAYLOAD: " + this.$element.attr("id")); durch den tatsächlich auszuführenden Code. Siehe relevante Geige: Ссылка

Wenn sich die äußere Anweisung von der aktuellen unterscheidet, wäre es einfach, den übergeordneten Controller zu bekommen, wenn Sie "?^y" benötigen. In diesem Fall gibt es uns den aktuellen Controller, daher müssen wir uns selbst loopen ( e.parent() ).

    
Nikos Paraskevopoulos 15.01.2014, 16:46
quelle
2

Abhängig vom genauen Anwendungsfall könnte eine compile -Funktion eine gute Lösung sein. compile Funktionen werden vor link Funktionen und - was noch wichtiger ist - in umgekehrter Reihenfolge ausgeführt. Bedeutung Eltern zuerst.

%Vor%

Eine andere Lösung könnte sein, den entsprechenden Code Ihrer Kind-Direktiven mit $timeout auszuführen.

%Vor%     
zeroflagL 15.01.2014 20:34
quelle