【发布时间】:2016-07-24 02:43:40
【问题描述】:
我试图用抽象状态实现一个安全区域,然后由具体状态实现。
根据this blog post,我认为我可以让抽象状态解析身份验证并让具体状态依赖它,因为如 ui-router 文档中所述
子状态将从父状态继承已解析的依赖项
但后来,同一个 ui-router 文档提到了这一点
如果您想在实例化子节点之前等待 promise 被解析,则必须将解析键注入子状态。
事实上,如果我在具体状态上注释掉resolveline,它就不再起作用了。
所以我真的错过了一些东西。 如果 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
})
更新:
经过几个小时的眼泪,看来我走错了路。问题不是来自继承的已解决依赖项,而是来自这样一个事实,即一旦解决了承诺,它就不会“重置”。
是否有强制承诺在每次状态变化时重新设置/重新评估?
【问题讨论】:
-
为什么要用什么来重新做什么?对每个状态变化重新评估什么?
-
我想这意味着我的问题无法理解,对此我深表歉意,但如果您肯定明白您的评论是不可回复的。如果您想进一步帮助我,欢迎您,但不清楚的地方请详细说明...
-
不错!显然,我添加了一个同样模糊的评论。对此感到抱歉。我认为我感到困惑的要点是问题的实质(例如
"If ChildState inherit resolved dependencies, why should they be re-injected?"和"Is there anyway to force the promise to be re-setted / re-evaluated on each state change?")。我们是在谈论过期的令牌还是打电话给unauth(),然后不再重新评估承诺? this look like it may help 吗?如果是这样,我可以详细说明。 -
天哪,就是这样!谢谢链接!我需要更深入地研究它!目前,我通过为任何状态更改设置 {reload: true} 选项来解决问题。但我真的很想了解地面概念。我保留票打开,您的任何评论将不胜感激!
-
状态变化是指ui-router的$state变化(例如$state.go()...)
标签: angularjs firebase angular-ui-router promise