我需要按顺序执行路由器解析。含义首先运行ProfileLoaded
http调用,完成后,运行Access
解析。我怎么能这样做?
$stateProvider.
state('sign-up', {
url : '/sign-up',
templateUrl: '/html/pages/registration.html',
controller: 'signupCtrl',
resolve : {
// Load profile first, then check if they are subscribed
ProfileLoaded : ['$rootScope', function ($rootScope) {
return $rootScope.loadProfile();
}],
// Then check Access
access: ['Access', function (Access) {
return Access.isSubscribed();
}]
}
})
其中$rootScope.loadProfile();
是AJAX $http
请求,其中Access.isSubscribed
依赖于加载的配置文件来执行身份验证路由。
合理的选择是将access
作为loadProfile
中的回调,但不要让它变得混乱。
答案 0 :(得分:2)
假设$rootScope.loadProfile
返回一个promise,只需添加所需的resolve
属性作为依赖项,例如
access: ['Access', 'ProfileLoaded', function(Access, ProfileLoaded) {
return Access.isSubscribed();
}]
请参阅http://angular-ui.github.io/ui-router/site/#/api/ui.router.util.$resolve#methods_resolve
解析invocables的依赖关系(按此优先顺序排列)
- 来自指定的当地人
- 来自此$ $ resolve
的另一个可调用对象- 从一个从父调用继承到$ resolve的invocable(或从该父级的任何祖先$ resolve递归)。
和
只要所有依赖项都可用,就会急切地调用Invocable。