web-dev-qa-db-fra.com

Comment surveiller un changement d'itinéraire dans AngularJS?

Comment regarder/déclencher un événement sur un changement d'itinéraire?

205
Robert Christian

Remarque : Il s'agit d'une réponse appropriée pour une version héritée d'AngularJS. Voir cette question pour les versions mises à jour.

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

Les événements suivants sont également disponibles (leurs fonctions de rappel utilisent des arguments différents):

  • $ routeChangeSuccess
  • $ routeChangeError
  • $ routeUpdate - if reloadOnSearch la propriété a été définie sur false

Voir le $ route docs.

Il existe deux autres événements non documentés :

  • $ locationChangeStart
  • $ locationChangeSuccess

Voir Quelle est la différence entre $ locationChangeSuccess et $ locationChangeStart?

325
Mark Rajcok

Si vous ne souhaitez pas placer la montre dans un contrôleur spécifique, vous pouvez l'ajouter pour l'application complète dans Angular app run()

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

myApp.run(function($rootScope) {
    $rootScope.$on("$locationChangeStart", function(event, next, current) { 
        // handle route changes     
    });
});
26
Zanon
$rootScope.$on( "$routeChangeStart", function(event, next, current) {
  //..do something
  //event.stopPropagation();  //if you don't want event to bubble up 
});
11
honkskillet
$rootScope.$on( "$routeChangeStart", function(event, next, current) {
  //if you want to interrupt going to another location.
  event.preventDefault();  });
2