我通过帖子
很好地阅读了这篇文章What "things" can be injected into others in Angular.js?
并且好奇,因为我被告知使用resolve属性来制作xhr并使用服务来帮助这些调用。此代码中的resolve属性如何工作?在什么时候调用$ injector?
app.config(function($stateProvider){
$stateProvider
.state("eventIndex", {
url: "/events",
views: {
"main": {
controller: "EventsCtrl",
templateUrl: "assets/events/index.html"
}
},
resolve: {
events: ['EventService', function(Event){
return Event.allEvents()
}
]
}
});
});
答案 0 :(得分:1)
如果您的问题是:$injector
要调用哪部分代码?
答案: config
函数,events
函数(虽然这在技术上声明为代码中的数组,但从AngularJS的角度来看,它是一个带注释的函数),以及EventsCtrl
功能。
如果您的问题是:何时调用resolve()
方法?
答案: ui-router
首先触发$stateChangeStart
,您有机会取消导航;如果没有,它将尝试通过调用resolve
来解决在$injector.invoke()
中声明的所有对象并取回承诺(如果没有,它们将被包含在承诺中)。
一旦所有承诺得到解决(或拒绝),ui-router
用户$injector
就会在解雇onExit
之前调用先前状态的onEnter
和当前状态的$stateChangeSuccess
(或拒绝时为$stateChangeError
)。
ui-view
指令侦听$stateChangeSuccess
以加载视图,使用$controller
提供程序实例化控制器(内部使用$injector.instantiate
,后者又使用$injector.invoke
,创建控制器实例)。