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

IT技术 javascript angularjs
2021-01-22 16:30:57

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

6个回答

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

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

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

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

请参阅$route文档。

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

  • $locationChangeStart
  • $locationChangeSuccess

请参阅$locationChangeSuccess 和 $locationChangeStart 之间的区别是什么?

对于使用 $state 而不是 $route 的每个人来说,这只是一个说明。在这种情况下,您需要注入 $state 并使用 $stateChangeStart。
2021-03-14 16:30:57
这是$rootScope.$on("$routeChangeStart", function (event, next, current) {现在。
2021-03-21 16:30:57
@KevinBeal 谢谢,谢谢,谢谢我正在发疯,试图弄清楚为什么这些事件没有触发。
2021-03-22 16:30:57
$locationChangeStart并且$locationChangeSuccess现在被记录在案!docs.angularjs.org/api/ng.$location
2021-03-25 16:30:57
您还需要在某处注入“$route”,否则这些事件永远不会触发。
2021-04-10 16:30:57

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

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

myApp.run(function($rootScope) {
    $rootScope.$on("$locationChangeStart", function(event, next, current) { 
        // handle route changes     
    });
});
当我遇到这样的答案并找到我不知道的东西时,我喜欢它,例如 .run() 虽然这不是我在特定用例中需要事件侦听器的地方,但它对我非常有用。谢谢赞农!
2021-04-07 16:30:57
我正在学习角度。所以我需要知道我们可以从事件、下一个、当前参数中获得什么样的信息?
2021-04-08 16:30:57
$rootScope.$on( "$routeChangeStart", function(event, next, current) {
  //..do something
  //event.stopPropagation();  //if you don't want event to bubble up 
});
$rootScope.$on( "$routeChangeStart", function(event, next, current) {
  //if you want to interrupt going to another location.
  event.preventDefault();  });

出于某种原因,建议的解决方案对我使用$routeChangeStart事件不起作用

如果您遇到同样的问题,请尝试:

$scope.$on('$stateChangeStart', function(evt, toState, toParams, fromState, fromParams) { 
   // ... you could trigger something here ...
 });

在我的配置中,我使用来自节点包管理器(又名 npm)的 @ui-router/angularjs(又名 angular-ui-router)