Cos'altro succede tra queste chiamate di funzione?
Le varie funzioni direttive vengono eseguite dall'interno di altri due funzioni angolari chiamate $compile(quando la direttiva del compileviene eseguita) e una funzione interna chiamata nodeLinkFn(dove della direttiva controller, preLinke postLinkvengono eseguiti). Varie cose accadono all'interno della funzione angolare prima e dopo che le funzioni direttive sono chiamate. Forse in particolare è la ricorsione del bambino. La seguente illustrazione semplificata mostra i passaggi chiave nelle fasi di compilazione e collegamento:

Per dimostrare questi passaggi, utilizziamo il seguente markup HTML:
<div ng-repeat="i in [0,1,2]">
<my-element>
<div>Inner content</div>
</my-element>
</div>
Con la seguente direttiva:
myApp.directive( 'myElement', function() {
return {
restrict: 'EA',
transclude: true,
template: '<div>{{label}}<div ng-transclude></div></div>'
}
});
Compilare
L' compileAPI si presenta così:
compile: function compile( tElement, tAttributes ) { ... }
Spesso ai parametri viene aggiunto il prefisso tper indicare che gli elementi e gli attributi forniti sono quelli del modello di origine, piuttosto che quello dell'istanza.
Prima della chiamata al compilecontenuto escluso (se presente) viene rimosso e il modello viene applicato al markup. Pertanto, l'elemento fornito alla compilefunzione sarà simile al seguente:
<my-element>
<div>
"{{label}}"
<div ng-transclude></div>
</div>
</my-element>
Si noti che il contenuto escluso non viene reinserito a questo punto.
A seguito della chiamata alla direttiva .compile, Angular attraverserà tutti gli elementi figlio, compresi quelli che potrebbero essere stati appena introdotti dalla direttiva (gli elementi del modello, ad esempio).
Creazione dell'istanza
Nel nostro caso, verranno create tre istanze del modello di origine sopra (di ng-repeat). Pertanto, la seguente sequenza verrà eseguita tre volte, una volta per istanza.
controllore
L' controllerAPI prevede:
controller: function( $scope, $element, $attrs, $transclude ) { ... }
Entrando nella fase di collegamento, la funzione di collegamento restituita tramite $compileora è dotata di un ambito.
Innanzitutto, la funzione di collegamento crea un ambito figlio ( scope: true) o un ambito isolato ( scope: {...}) se richiesto.
Il controller viene quindi eseguito, fornito con l'ambito dell'elemento istanza.
Pre-link
L' pre-linkAPI si presenta così:
function preLink( scope, element, attributes, controller ) { ... }
Praticamente non succede nulla tra la chiamata alla direttiva .controllere la .preLinkfunzione. Angular fornisce ancora raccomandazioni su come utilizzare ciascuna.
A seguito della .preLinkchiamata, la funzione di collegamento attraverserà ciascun elemento figlio, chiamando la funzione di collegamento corretta e collegando ad esso l'ambito corrente (che funge da ambito padre per gli elementi figlio).
Post-Link
L' post-linkAPI è simile a quella della pre-linkfunzione:
function postLink( scope, element, attributes, controller ) { ... }
Forse vale la pena notare che una volta .postLinkchiamata la funzione di una direttiva , il processo di collegamento di tutti i suoi elementi figlio è stato completato, comprese tutte le .postLinkfunzioni dei bambini .
Ciò significa che quando .postLinkviene chiamato, i bambini sono "vivi" pronti. Ciò comprende:
- associazione dati
- trasclusione applicata
- ambito allegato
Il modello in questa fase apparirà così:
<my-element>
<div class="ng-binding">
"{{label}}"
<div ng-transclude>
<div class="ng-scope">Inner content</div>
</div>
</div>
</my-element>