AngularJS - resolve 和 run() 执行顺序

20 浏览
0 Comments

AngularJS - resolve 和 run() 执行顺序

感谢这个回答,我能够看到Angular中模块运行的顺序,我的问题是:\n如果我有:\n

app.config(function () {
    $routeProvider.when('/', {
        ....
        resolve: {
            // 需要解决的事情
        }
    });
});
app.run(function () {
    // 需要运行的事情
});

\nrun()会在routeProvider的resolve:{}解决之前执行吗?

0
0 Comments

在我的实验中,至少可以肯定resolve在app.run之后执行。在这个jsfiddle中,你可以看到我得到的调用顺序是:

  1. app配置
  2. app运行
  3. 指令设置
  4. 指令编译
  5. app控制器
  6. 指令链接
  7. ** Data resolve被调用 **
  8. 新路由的控制器

如你在fiddle中所见,我通过将resolve中的一个属性的值设为console.log函数来检查这一点:

resolve: {
    data: function() {
        console.log('Data resolve被调用');
    }
}

你可以在你的代码中使用相同的方法来检查$routeProvider何时开始检查依赖关系。

问题的出现原因是$routeProvider在检查依赖关系时会先执行resolve中定义的函数。这导致了在resolve函数中可能会依赖于app.run中的某些设置或操作的情况下,无法正确获取到这些设置或操作的值。为了解决这个问题,可以将需要在resolve中使用的设置或操作移到app.config中,这样它们就能在resolve执行之前被正确地设置或执行。这样就能确保在resolve函数中获取到正确的值。

0