如何在AngularJS中观察路线变化?

Rob*_*ian 207 javascript angularjs

如何观察/触发路线上的事件变化?

Mar*_*cok 327

注意:这是AngularJS的旧版本的正确答案.有关更新版本,请参阅此问题.

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

以下事件也可用(它们的回调函数使用不同的参数):

  • $ routeChangeSuccess
  • $ routeChangeError
  • $ routeUpdate - 如果reloadOnSearch属性已设置为false

请参阅$ route docs.

还有另外两个未记录的事件:

  • $ locationChangeStart
  • $ locationChangeSuccess

看看$ locationChangeSuccess和$ locationChangeStart之间有什么区别?

  • 你还需要在某处注入"$ route",否则这些事件永远不会发生. (37认同)
  • 现在记录了`$ locationChangeStart`和`$ locationChangeSuccess`!http://docs.angularjs.org/api/ng.$location (18认同)
  • 它是`$ rootScope.$ on("$ routeChangeStart",函数(event,next,current){`now. (6认同)
  • 只是给每个人使用$ state而不是$ route的注释.在这种情况下,您需要注入$ state并使用$ stateChangeStart. (4认同)
  • @KevinBeal谢谢,谢谢,*谢谢*.我正在尝试解决为什么这些事件没有发生的香蕉. (2认同)
  • $ locationChangeSuccess和$ routeChangeSuccess之间的区别是什么 (2认同)

Zan*_*non 27

如果您不想将手表放在特定控制器中,可以在Angular应用程序中为整个应用程序添加手表 run()

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

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


hon*_*let 11

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