2013-06-06 16 views
7

Mam $scope.$watch zadeklarowany w kontrolerze dyrektywy. Czy po zmianie stron i usunięciu dyrektywy muszę ręcznie zniszczyć drogę? Jeśli tak, to jak wykryć, kiedy dyrektywa została usunięta?Dyrektywa Angularjs usuwa zegarek?

+0

Angular powinien się tym zająć –

Odpowiedz

20

To zależy od zakresu, a nie od dyrektywy. Jeśli zasięg zostanie zniszczony, wszystkie jego wartowniki zginą wraz z nim. Na stronie zmień swój zakres na niszczone przez kąt, więc powinieneś być bezpieczny.

Po zgaśnięciu lunety uzyskuje się zdarzenie $ destroy. Można oglądać go:

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

i można ręcznie odłączyć $ obserwatorów z zakresu, poprzez wywołanie funkcji powraca:

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

Można to zrobić za pomocą $ na zbyt.

+0

Po pierwsze, powiedziałeś, że gdy zasięg jest zniszczony, wszyscy obserwatorzy giną razem z nim. Następnie zasugerowałeś ręczne usunięcie obserwatorów z zdarzenia scope $ destroy (dlaczego? Mają automatycznie umrzeć z zakresem). To nie ma dla mnie sensu. Czy mógłbyś to rozwinąć? – hendrix

+1

Po zmianie strony za pomocą kąta ngView wyczyścisz ostatni zakres dla obserwatorów. (proof => http://goo.gl/GD0pM9) Również kątowa daje funkcję niszczenia obserwatora, dzięki czemu można ręcznie usunąć wyrażenie, jeśli nie jest już potrzebne w bieżącym zakresie. – Oliver

Powiązane problemy