2013-08-20 13 views
10

Czy istnieje sposób na wykrycie globalnych zmian lokalizacji w AngularJS, a nie tylko pojedynczy kontroler? Moim celem jest wykrycie każdej zmiany lokalizacji. Czy jest jakiś skuteczny sposób na obejrzenie window.location.href dla zmian?Zmiana lokalizacji w Angular

$routeChangeSuccess 

Jak rozumiem, dotyczy tylko jednego kontrolera lub jestem w błędzie?

+2

Mogłeś kontroler podstawowy, który obejmuje całą aplikację, i że kontroler nasłuchiwać Zdarzenie routeChangeSuccess. –

Odpowiedz

23

Po pierwsze, $routeChangeSuccess nie jest ograniczony do jednego kontrolera. Jest transmitowany z poziomu $rootScope, co oznacza, że ​​można go odsłuchiwać na każdym z zakresów (lub każdego zakresu dziedziczącego po $rootScope), ale jest zdarzeniem szerokim dla aplikacji.

Istnieje również nieudokumentowane zdarzenie, które działa podobnie do $routeChangeSuccess o nazwie $locationChangeSuccess. Różnica polega na tym, że pierwsza jest uruchamiana, gdy trasa została pomyślnie zmieniona, a druga jest uruchamiana po zmianie adresu URL, ale przed zmianą trasy. Zauważ, że to nie wszystkie zmiany adresów URL, tylko czas, w którym URL zmienia się w sposób, w jaki aplikacja AngularJS może je zarejestrować (na przykład wywołanie setera do $location.url()).

Po prostu, aby wyjaśnić, $locationChangeSuccess jest również nadawany z $rootScope.

W obu przypadkach można odsłuchać zdarzenie za pomocą scope.$on('$routeChangeSuccess') lub scope.$on('$locationChangeSuccess').