routeChangeStart事件和渲染的顺序

时间:2013-10-04 20:57:30

标签: angularjs angularjs-directive angular-routing

我有一个模块的run函数,在它里面有一个$routeChangeStart事件绑定。我想知道第一个routeChangeStart事件触发的时间。我希望它应该在第一次请求后立即调用,但在任何页面呈现之前,但它不是我预期的。似乎在页面开始渲染后调用该事件。

  module.run(function ($location, $rootScope) {
      $rootScope.$on("$routeChangeStart", function (event, next, current) {
         //do something with next.xxx
      });
   })

预期的行为是什么?或者这是一个错误?

1 个答案:

答案 0 :(得分:0)

在页面开始渲染之前触发事件,但这并不意味着您将在渲染开始之前捕获它。事件被触发,然后调用堆栈中的下一件事是当Angular开始页面呈现(获取模板,等待路由解析属性等)并且之后捕获事件。来自angular docs ...

  

路线变更前广播。此时路线服务   开始解决路由更改所需的所有依赖项   发生。通常,这也涉及获取视图模板   作为解析路由属性中定义的任何依赖项。一切都结束了   依赖性被解决$ routeChangeSuccess被触发。

如果您需要执行类似阻止更改的操作,请尝试使用$locationChangeStart事件。例如......

$scope.$on('$locationChangeStart', function (event) {
    if (someCondition) {
       event.preventDefault(); // prevent the change
    }
});

这将在Angular开始加载新页面之前运行。