如何观察/触发路线变化上的事件?
如何观察 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
如果您不想将手表放在特定的控制器中,您可以在 Angular 应用程序中为整个应用程序添加手表 run()
var myApp = angular.module('myApp', []);
myApp.run(function($rootScope) {
$rootScope.$on("$locationChangeStart", function(event, next, current) {
// handle route changes
});
});
$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)