2013-06-06 19 views
7

Ho un $scope.$watch dichiarato nel controller di una direttiva. Quando cambio pagina e la direttiva viene rimossa, devo distruggere manualmente la strada? In tal caso, come posso rilevare quando la direttiva è stata rimossa?La direttiva Angularjs rimuove l'orologio?

+0

Angular dovrebbe occuparsene per te –

risposta

20

Dipende dall'ambito, non dalla direttiva. Se l'ambito viene distrutto, tutti i suoi $ watcher muoiono con esso. A pagina cambia il tuo raggio d'azione sarà distrutto da angolare, quindi dovresti essere al sicuro.

Quando un oscilloscopio muore produce un evento $ destroy. Potete vederlo:

$scope.$on('$destroy', callback); 

e si può staccare manualmente $ osservatori dal campo di applicazione, chiamando la funzione restituisce:

var sentinel = $scope.$watch('expression', callback); 
sentinel(); // kill sentinel 

Si può fare questo con $ troppo.

+0

In primo luogo, hai detto che quando il campo di applicazione viene distrutto, tutti gli osservatori muoiono con esso. Quindi hai suggerito di rimuovere manualmente gli osservatori sull'evento $ destroy dell'ambito (perché? Si suppone che muoiano automaticamente con scope). Non ha senso per me. Potresti elaborare per favore? – hendrix

+1

Quando la pagina viene modificata con ngView angular pulirà l'ultimo ambito per voi con gli osservatori. (proof => http://goo.gl/GD0pM9) Anche angolare ti dà una funzione destroy di watcher in modo da poter rimuovere manualmente l'espressione se non ne hai più bisogno nell'ambito corrente. – Oliver

Problemi correlati