2014-09-19 9 views
6

widzę ten rodzaj kodu wiele modułów kątowychKiedy robi zakres naturalnie dostać zniszczone w angularjs cyklu

scope.$on('$destroy', function(){ 
    //undind listener here 
}); 

Moje zrozumienie jest, że gdy zakres ma być zniszczony to rozgłasza zdarzenie $destroy pozwalając aby wyczyścić dowolny kod, który może nadal działać po zniszczeniu zakresu, który spowodowałby wycieki pamięci.

Moje pytanie brzmi, kiedy zakres naturalnie zostanie zniszczony w aplikacji angularjs. Cała dokumentacja, którą mogę znaleźć na stronie internetowej, umożliwia ręczne wywoływanie $destroy w celu usunięcia zakresu, ale wydaje się to sugerować, że nastąpi to w pewnym momencie automatycznie. Kiedy to będzie?

+2

Po zmianie trasy/stwierdza $ zakres poprzedniego kontrolera zostanie zniszczony automatycznie. –

+0

Czy są jakieś inne czasy, czy to prawda? – richbai90

+0

Tak. Jak widać w [kątowych docs] (https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$destroy) to zdarzenie może być wywołane przez dowolną instancję zasięgu, na przykład zasięg dyrektywy. – meriadec

Odpowiedz

0

Zakres jest powiązany z elementami HTML podczas kompilacji. $ compile potrzebuje zakresu do kompilacji elementu. Elementy mogą być zagnieżdżone. Niektóre otrzymują nowy zakres dziedziczą inne.

Zakres zostaje zniszczony, gdy elementy zostaną usunięte z DOM.

Precyzyjnie: wywoływacze są wywoływane na jQuery.cleanData, które AngularJS na nowo definiuje i wywołuje po oczyszczeniu - działa również w niszczeniu zakresu.

cleanData Funkcja jest wywoływana, gdy element jest usuwany z DOM.

What is the purpose of jQuery clean and cleanData methods?

Powiązane problemy