Was passiert sonst noch zwischen diesen Funktionsaufrufen?
Die verschiedenen Direktivenfunktionen werden innerhalb von zwei anderen Winkelfunktionen ausgeführt, die aufgerufen werden $compile(wo die Direktiven compileausgeführt werden), und einer internen Funktion, die aufgerufen wird nodeLinkFn(wo die Direktiven ausgeführt werden controller, preLinkund postLinkausgeführt werden). Innerhalb der Winkelfunktion passieren verschiedene Dinge, bevor und nachdem die Direktivenfunktionen aufgerufen werden. Am bemerkenswertesten ist vielleicht die Kinderrekursion. Die folgende vereinfachte Abbildung zeigt die wichtigsten Schritte in der Kompilierungs- und Verknüpfungsphase:

Um diese Schritte zu demonstrieren, verwenden wir das folgende HTML-Markup:
<div ng-repeat="i in [0,1,2]">
<my-element>
<div>Inner content</div>
</my-element>
</div>
Mit folgender Richtlinie:
myApp.directive( 'myElement', function() {
return {
restrict: 'EA',
transclude: true,
template: '<div>{{label}}<div ng-transclude></div></div>'
}
});
Kompilieren
Die compileAPI sieht folgendermaßen aus:
compile: function compile( tElement, tAttributes ) { ... }
Oft wird den Parametern ein Präfix vorangestellt, um tzu kennzeichnen, dass die bereitgestellten Elemente und Attribute eher die der Quellvorlage als die der Instanz sind.
Vor dem Aufruf von compiletranskludiertem Inhalt (falls vorhanden) wird entfernt und die Vorlage auf das Markup angewendet. Das für die compileFunktion bereitgestellte Element sieht also folgendermaßen aus:
<my-element>
<div>
"{{label}}"
<div ng-transclude></div>
</div>
</my-element>
Beachten Sie, dass der übertragene Inhalt zu diesem Zeitpunkt nicht erneut eingefügt wird.
Nach dem Aufruf der Direktive .compiledurchläuft Angular alle untergeordneten Elemente, einschließlich derjenigen, die möglicherweise gerade von der Direktive eingeführt wurden (z. B. die Vorlagenelemente).
Instanzerstellung
In unserem Fall werden drei Instanzen der obigen Quellvorlage (von ng-repeat) erstellt. Daher wird die folgende Sequenz dreimal pro Instanz ausgeführt.
Regler
Die controllerAPI beinhaltet:
controller: function( $scope, $element, $attrs, $transclude ) { ... }
In der Verbindungsphase wird die über zurückgegebene Verbindungsfunktion $compilenun mit einem Bereich versehen.
Zunächst erstellt die Verknüpfungsfunktion auf Anfrage einen untergeordneten Bereich ( scope: true) oder einen isolierten Bereich ( scope: {...}).
Der Controller wird dann ausgeführt und mit dem Bereich des Instanzelements versehen.
Pre-Link
Die pre-linkAPI sieht folgendermaßen aus:
function preLink( scope, element, attributes, controller ) { ... }
Zwischen dem Aufruf der Direktive .controllerund der .preLinkFunktion passiert praktisch nichts . Angular gibt weiterhin Empfehlungen, wie jedes verwendet werden sollte.
Nach dem .preLinkAufruf durchläuft die Verknüpfungsfunktion jedes untergeordnete Element. Dabei wird die richtige Verknüpfungsfunktion aufgerufen und der aktuelle Bereich (der als übergeordneter Bereich für untergeordnete Elemente dient) angehängt.
Post-Link
Die post-linkAPI ähnelt der der pre-linkFunktion:
function postLink( scope, element, attributes, controller ) { ... }
Es ist vielleicht erwähnenswert, dass nach dem .postLinkAufruf der Funktion einer Direktive der Verknüpfungsprozess aller untergeordneten Elemente abgeschlossen ist, einschließlich aller untergeordneten .postLinkFunktionen.
Dies bedeutet, dass zum Zeitpunkt des .postLinkAnrufs die Kinder "leben" und bereit sind. Das beinhaltet:
- Datenbindung
- Transklusion angewendet
- Umfang beigefügt
Die Vorlage in dieser Phase sieht also folgendermaßen aus:
<my-element>
<div class="ng-binding">
"{{label}}"
<div ng-transclude>
<div class="ng-scope">Inner content</div>
</div>
</div>
</my-element>