Как следить за изменением маршрута в AngularJS?

Как можно наблюдать/запускать событие при изменении маршрута?

Ответ 1

Примечание. Это правильный ответ для устаревшей версии AngularJS. См. этот вопрос для обновленных версий.

$scope.$on('$routeChangeStart', function($event, next, current) { 
   // ... you could trigger something here ...
 });

Также доступны следующие события (их функции обратного вызова принимают разные аргументы):

  • $routeChangeSuccess
  • $routeChangeError
  • $routeUpdate - если свойство reloadOnSearch установлено в false

Смотрите $route docs.

Есть еще два события undocumented:

  • $locationChangeStart
  • $locationChangeSuccess

См. В чем разница между $locationChangeSuccess и $locationChangeStart?

Ответ 2

Если вы не хотите размещать часы внутри определенного контроллера, вы можете добавить часы для всего приложения в Angular app run()

var myApp = angular.module('myApp', []);

myApp.run(function($rootScope) {
    $rootScope.$on("$locationChangeStart", function(event, next, current) { 
        // handle route changes     
    });
});

Ответ 3

$rootScope.$on( "$routeChangeStart", function(event, next, current) {
  //..do something
  //event.stopPropagation();  //if you don't want event to bubble up 
});

Ответ 4

$rootScope.$on( "$routeChangeStart", function(event, next, current) {
  //if you want to interrupt going to another location.
  event.preventDefault();  });