ui-router继承已解析的依赖项

时间:2016-04-04 13:54:37

标签: angularjs firebase angular-ui-router promise

我试图实现一个具有抽象状态的安全区域,然后由具体状态实现。

根据this blog post,我认为我可以让抽象状态解析身份验证并让具体状态依赖它,因为如ui-router docs中所述

  

子状态将从父状态继承已解析的依赖关系

但是后来,同样的ui-router doc提到了

  

如果要在实例化子项之前等待解析promise,则必须将解析键注入子状态。

事实上,如果我在具体状态上注释掉resolve行,它就不再起作用了。

所以我真的错过了什么。 如果ChildState继承已解决的依赖关系,为什么要重新注入?

我的代码如下:

router.config(function($stateProvider, $urlRouterProvider) {

    var authentication = ["Auth", function(Auth) {

                    return Auth.$requireAuth();
                }];

    .state('secure', {
            abstract: true,
            template: '<navbar></navbar><ui-view/>',
            resolve: authentication


        })

        .state('secure.concrete', {
            url: '/concrete',
            templateUrl: 'views/concrete.html',
            controller: 'concreteCtrl',
            resolve: authentication  // <--- if i comment this out, it wont work
        })

更新:

经过几个小时的流泪,看起来我走错了路。问题不是来自继承的已解决的依赖关系,而是因为一旦promisse得到解决,它就不会被重置&#34;。

无论如何都要强制在每次状态变更时重新设置/重新评估承诺?

2 个答案:

答案 0 :(得分:2)

问题可能来自错误的resolve语法,它应该是一个对象:

resolve: {
  authentication: authentication
}

&#39;必须注入儿童状态&#39;表示authentication应明确声明为子状态控制器依赖。关于子状态的重复resolve不是注射;它只会让authentication被调用两次。

答案 1 :(得分:0)

这对我有用,但我不确定原因:

而不是正常调用state.go()或ui-sref,我用state.go(state,{reload:true})或

调用它们

这样决心似乎会重新评估。