我试图实现一个具有抽象状态的安全区域,然后由具体状态实现。
根据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;。
无论如何都要强制在每次状态变更时重新设置/重新评估承诺?
答案 0 :(得分:2)
问题可能来自错误的resolve
语法,它应该是一个对象:
resolve: {
authentication: authentication
}
&#39;必须注入儿童状态&#39;表示authentication
应明确声明为子状态控制器依赖。关于子状态的重复resolve
不是注射;它只会让authentication
被调用两次。
答案 1 :(得分:0)
这对我有用,但我不确定原因:
而不是正常调用state.go()或ui-sref,我用state.go(state,{reload:true})或
调用它们这样决心似乎会重新评估。