顺序角状态提供者解析

时间:2016-06-06 00:03:51

标签: angularjs http

我需要按顺序执行路由器解析。含义首先运行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中的回调,但不要让它变得混乱。

1 个答案:

答案 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。