编辑:这实际上有效,问题来自于别的东西。
我正在努力解决边缘情况,基本上是:
$stateProvider.state('myState', {
resolve:{
resolveA: function($q){
return $q.when('whatever');
},
resolveB: function(resolveA){
return fetchSomethingBasedOn(resolveA);
}
}
);
这不起作用,因为resolveA
无法在resolveB
函数中注入。
我已经考虑了一些选项但拒绝了:
{resolveA, resolveB}
。丢弃,因为这会对我现有的控制器产生许多副作用。controller
级别的resolveB行为。因为这个状态是一个抽象的高级别而被丢弃,我不想改变所有的孩子states/controllers
答案 0 :(得分:2)
ui-router nested resolve不适用于同一个状态,但它应该适用于嵌套状态。您可以从父状态访问resolved
个对象。
$stateProvider
.state('parent', {
resolve:{
resolveA: function($q){
return $q.when('whatever');
}
}
)
.state('parent.child', {
resolve:{
resolveB: function(resolveA){
return fetchSomethingBasedOn(resolveA);
}
}
);
答案 1 :(得分:-1)
似乎OK-ish的选项是将resolveB的结果附加到resolveA对象并且只有一个解析。即:
$stateProvider.state('myState', {
resolve:{
resolveA: function($q){
return $q.when('whatever').then(function(resolveA){
return fetchSomethingBasedOnResolveA(resolveA).then(function(resolveB){
resolveA.resolveB = resolveB;
return resolveA;
})
});
}
}
);
答案 2 :(得分:-1)
您的问题的解决方案是使用promises。在开始使用resolveB之前,您必须确保解决了resolveA的承诺。
代码应该是这样的。
$stateProvider.state('myState', {
resolve:{
resolveA: function($q){
var def = $q.defer();
//whatever you want i.e.
User.resource.get(function(perfil){
def.resolve(perfil);
});
//
return def.promise;
},
resolveB: function(resolveA){
return fetchSomethingBasedOn(resolveA);
}});
这应该可以解决你的问题。
问候。