При изменении местоположения в Angular

Есть ли способ обнаружить глобальные изменения местоположения в AngularJS, а не только один контроллер? Моя цель - обнаружить каждое изменение местоположения. Или есть ли эффективный способ просмотра window.location.href для изменений?

$routeChangeSuccess 

Как я понял, для одного контроллера, или я ошибаюсь?

Ответ 1

Прежде всего, $routeChangeSuccess не ограничивается одним контроллером. Он транслируется из $rootScope, что означает, что его можно прослушивать по каждой области (или каждой области, которая наследуется от $rootScope), но является событием широкого применения.

Существует также недокументированное событие, которое работает подобно $routeChangeSuccess, называемому $locationChangeSuccess. Разница в том, что бывший огонь срабатывает, как только маршрут успешно изменился, а последний срабатывает при изменении URL-адреса, но до изменения маршрута. Обратите внимание, что это не все изменения URL-адресов, просто URL-адрес изменяется таким образом, что приложение AngularJS может его зарегистрировать (например, вызов сеттера на $location.url()).

Чтобы уточнить, $locationChangeSuccess также транслируется из $rootScope.

Для обоих вы можете прослушивать событие с помощью scope.$on('$routeChangeSuccess') или scope.$on('$locationChangeSuccess').

Ответ 2

Для тех, кто использует Angular -UI-Router, это событие не срабатывает. "$ stateChangeSuccess" - это правильное событие для Angular -UI-Router. Для получения дополнительной информации о событиях UI-маршрутизатора см. Этот вопрос SO:
Как запустить просмотр интерфейса UI-Router?
и руководство по API:
https://github.com/angular-ui/ui-router/wiki#state-change-events