AngularJS - resolve 和 run() 执行顺序
在我的实验中,至少可以肯定resolve在app.run之后执行。在这个jsfiddle中,你可以看到我得到的调用顺序是:
- app配置
- app运行
- 指令设置
- 指令编译
- app控制器
- 指令链接
- ** Data resolve被调用 **
- 新路由的控制器
如你在fiddle中所见,我通过将resolve中的一个属性的值设为console.log函数来检查这一点:
resolve: { data: function() { console.log('Data resolve被调用'); } }
你可以在你的代码中使用相同的方法来检查$routeProvider何时开始检查依赖关系。
问题的出现原因是$routeProvider在检查依赖关系时会先执行resolve中定义的函数。这导致了在resolve函数中可能会依赖于app.run中的某些设置或操作的情况下,无法正确获取到这些设置或操作的值。为了解决这个问题,可以将需要在resolve中使用的设置或操作移到app.config中,这样它们就能在resolve执行之前被正确地设置或执行。这样就能确保在resolve函数中获取到正确的值。