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?
risposta
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.
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
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
Angular dovrebbe occuparsene per te –