Ich habe eine Direktive implementiert, die mehrere Fragmente von Kind-Inhalten in eine Vorlage umwandelt. Es funktioniert, scheint aber einfacher als die meisten der Beispiele, die ich gesehen habe, und warf ein paar Fragen auf, wie Transclusion funktioniert.
Hier ist die Richtlinie:
%Vor%und hier ist Beispiel Verwendung:
%Vor%Sie können es in Aktion in dieser Geige sehen.
Bitte beachten Sie ein paar Dinge:
Danke.
BEARBEITEN: Um Frage # 2 teilweise zu beantworten, habe ich festgestellt, dass Sie explizit übersetzten Inhalt kompilieren müssen, der nicht aus der Vorlage geklont wurde, auf die die Anweisung angewendet wurde. Sehen Sie den Unterschied im Verhalten hier: Ссылка
Um Ihre Frage zu den Unterschieden zwischen $ transclude-Funktion in der Funktion controller vs. linking zu beantworten, müssen wir zuerst verstehen, dass $ transclude-Funktion über Direktive aufgerufen werden kann Kompilieren , Controller und Verknüpfen Funktionen.
AKTUALISIEREN : Laut der 1.4 Angular-Dokumentation wurde kompilieren (transclude) veraltet ! Die transclude-Funktion kann also nur in der directive Controller - oder Linking -Funktion aufgerufen werden. (Siehe offizielle Dokumentation für Detailerklärung )
Es gibt einen großen Unterschied, wenn $ transclude in der compile -Phase und $ transclude in controller und linking -Phase aufgrund der Compilierungsphase verwendet wird , Sie haben keinen Zugriff auf $ scope vs. in controller und linking Funktionen, in denen $ scope (controller) und scope (linking) verfügbar sind. Der einzige Unterschied bei der Verwendung von $ transclude in directive controller vs. linking ist Reihenfolge der Ausführung . Bei mehreren verschachtelten Direktiven ist es relativ sicher, $ transclude während der Verknüpfungsphase zu verwenden, anstatt es in Ihrem Controller zu verwenden.
Die Reihenfolge lautet wie folgt:
parentDirectiveCompile - & gt; childDirectiveCompile (Kompilierung der Richtlinie)
parentDirectiveControllerPre, parentDirectiveControllerPost - & gt; childDirectiveControllerPre, childDirectiveControllerPost (Richtliniencontroller)
Beachten Sie, wie childLinkFunction zuerst vor parentLinkFunction ausgeführt wird? (Reihenfolge der Ausführung)
Hilfreiche Ressource :
Hoffentlich kann diese Antwort für Sie hilfreich sein!
nach einer Untersuchung:
Nach der Freigabe von Angular 1.20 erben bereits vorhandene untergeordnete Knoten einer kompilierten Direktive mit einem isolieren Bereich nicht mehr den neuen isolierten Bereich, da sie bereits dem übergeordneten Bereich zugewiesen wurden. Also ... die eingebaute transclude-Methode, die das Attribut ng-transclude verwendet, wird in diesem Fall nur Templates an den gewünschten Ort transponieren, aber nicht bereits existierendes HTML an diesen Ort übertragen. Dies bedeutet, dass wenn Sie eine Direktive mit einem isolate-Bereich hätten und Sie möchten, dass das bereits vorhandene html in den neuen isolate-Bereich kompiliert wird, müssen Sie die linker-Funktion transclude innerhalb der Direktive verwenden.
Sie können hier einen Arbeitsfall dieses Problems sehen ui-codemirror, der in benutzerdefinierte Anweisungen eingefügt wurde, schlägt ohne Fehler fehl
Tags und Links angularjs angularjs-directive