我有一个模块的run函数,在它里面有一个$routeChangeStart
事件绑定。我想知道第一个routeChangeStart事件触发的时间。我希望它应该在第一次请求后立即调用,但在任何页面呈现之前,但它不是我预期的。似乎在页面开始渲染后调用该事件。
module.run(function ($location, $rootScope) {
$rootScope.$on("$routeChangeStart", function (event, next, current) {
//do something with next.xxx
});
})
预期的行为是什么?或者这是一个错误?
答案 0 :(得分:0)
在页面开始渲染之前触发事件,但这并不意味着您将在渲染开始之前捕获它。事件被触发,然后调用堆栈中的下一件事是当Angular开始页面呈现(获取模板,等待路由解析属性等)并且之后捕获事件。来自angular docs ...
路线变更前广播。此时路线服务 开始解决路由更改所需的所有依赖项 发生。通常,这也涉及获取视图模板 作为解析路由属性中定义的任何依赖项。一切都结束了 依赖性被解决$ routeChangeSuccess被触发。
如果您需要执行类似阻止更改的操作,请尝试使用$locationChangeStart事件。例如......
$scope.$on('$locationChangeStart', function (event) {
if (someCondition) {
event.preventDefault(); // prevent the change
}
});
这将在Angular开始加载新页面之前运行。