La controller
funzione / oggetto rappresenta un controller-view-controller (MVC) di astrazione. Mentre non c'è nulla di nuovo da scrivere su MVC, è ancora il vantaggio più significativo dell'angolare: dividere le preoccupazioni in pezzi più piccoli. E questo è tutto, niente di più, quindi se avete bisogno di reagire a Model
cambiamenti provenienti dal View
il Controller
è il diritto persona a fare quel lavoro.
La storia della link
funzione è diversa, viene da una prospettiva diversa rispetto a MVC. Ed è davvero essenziale, una volta che vogliamo oltrepassare i confini di un controller/model/view
(modello) .
Cominciamo con i parametri che vengono passati nella link
funzione:
function link(scope, element, attrs) {
- scope è un oggetto scope angolare.
- L'elemento è l'elemento avvolto in jqLite a cui questa direttiva corrisponde.
- attrs è un oggetto con i nomi degli attributi normalizzati e i loro valori corrispondenti.
Per link
entrare nel contesto, dovremmo menzionare che tutte le direttive stanno attraversando questo processo di inizializzazione: compilazione , collegamento . Un estratto del libro Angular JS di Brad Green e Shyam Seshadri :
Fase di compilazione (una sorella del link, menzioniamola qui per avere un'immagine chiara):
In questa fase, Angular accompagna il DOM per identificare tutte le direttive registrate nel modello. Per ogni direttiva, quindi trasforma il DOM in base alle regole della direttiva (modello, rimpiazzare, escludere e così via) e chiama la funzione di compilazione se esiste. Il risultato è una funzione modello compilata,
Fase di collegamento :
Per rendere dinamica la vista, Angular esegue quindi una funzione di collegamento per ogni direttiva. Le funzioni di collegamento in genere creano listener sul DOM o sul modello. Questi listener mantengono sempre la vista e il modello sincronizzati.
Un buon esempio su come utilizzare link
potrebbe essere trovato qui: Creazione di direttive personalizzate . Vedi l'esempio: Creazione di una direttiva che manipola il DOM , che inserisce una "data-ora" nella pagina, aggiornata ogni secondo.
Solo un frammento molto breve di quella ricca fonte sopra, che mostra la vera manipolazione con DOM. C'è una funzione agganciata al servizio $ timeout e inoltre viene cancellata nella sua chiamata distruttore per evitare perdite di memoria
.directive('myCurrentTime', function($timeout, dateFilter) {
function link(scope, element, attrs) {
...
// the not MVC job must be done
function updateTime() {
element.text(dateFilter(new Date(), format)); // here we are manipulating the DOM
}
function scheduleUpdate() {
// save the timeoutId for canceling
timeoutId = $timeout(function() {
updateTime(); // update DOM
scheduleUpdate(); // schedule the next update
}, 1000);
}
element.on('$destroy', function() {
$timeout.cancel(timeoutId);
});
...
$watch
,$digest
e$apply
. "?