11

Nella funzione di compilazione di una direttiva angolare esiste un pre e un post. Questo pre e post è esattamente uguale alla funzione di collegamento?In Angular: i metodi pre e post della funzione di compilazione sono gli stessi di pre e post del collegamento

Ad esempio nel seguente codice, la funzione di collegamento è la stessa (collegamento se necessario) come pre e post della funzione di compilazione sottostante?

link

.... 
link: { 
    pre: function(scope, elem, attr) { 
    //stuff 
    }, 
    post: function(scope, elem, attr) { 
    //stuff 
    }  
} 
.... 

Compile ...

.... 
    compile: function(tElem, tAttrs){ 
    return { 
     pre: function(scope, iElem, iAttrs){ 
     //stuff 
     }, 
     post: function(scope, iElem, iAttrs){ 
     //stuff 
     } 
    } 
    } 
    ..... 

risposta

8

Compile viene eseguito prima (e di solito è dove si maipulate tuoi elementi DOM "template"). Il collegamento viene eseguito secondo, ed è solitamente dove si collega la direttiva a $ scope.

Eseguono anche in un ordine specifico, quindi è possibile utilizzare questo fatto quando si progettano direttive che richiedono alcune impostazioni direttive "parent" per funzionare correttamente (come una cosa tr mi di tipo).

C'è un really great article sulla temporizzazione per la compilazione vs collegamento che puoi dare un'occhiata per maggiore chiarezza.

Inoltre, c'è un very low level stack answer to a similar question che potrebbe piacerti (nota che NON è quello elencato per primo, è quello più ottimizzato).

Quindi, qual è la differenza?

Quindi il collegamento pre/post compilato è "uguale" alla funzione di collegamento? Tu decidi.

Se si definisce compilazione su una direttiva, il framework ignora la funzione di collegamento (poiché la funzione di compilazione deve restituire funzioni di collegamento pre/post).

E 'un po' come link sovraccarichi compile.postLink e link.pre sovraccarichi compile.preLink.

+0

l'articolo che hai postato è quello che stavo guardando quando questa domanda mi è venuta in mente. quindi ho solo bisogno di più di un "sì" o "no" alla mia domanda e alle mie ipotesi – user1142130

+0

quindi "è compilato pre/post come link pre/post"? Solo una scorciatoia? no ;-) – bri

+0

ok, come si differenziano? – user1142130

0

Quando si verifica questo sovraccarico, sei a conoscenza di qualcosa di diverso che accade (ad esempio qualsiasi altra funzionalità aggiunta) come si suppone solo per il ritorno pre e post dalla compilazione?

Se si guarda alla source code, quando il $directiveProvider registra le direttive, se la proprietà compile manca ed esiste la proprietà link, si crea una proprietà compile che è una funzione vuota che restituisce la proprietà link.

Quindi la risposta è che le funzioni di collegamento restituite dalla funzione di compilazione sono le stesse delle funzioni di collegamento fornite dalla proprietà link del DDO. Non sono state aggiunte altre funzionalità.

Problemi correlati