Javascript ui路由器:父';状态更改时未调用s resolve
在ui路由器中,当一个状态改变时,它应该调用它的所有父解析。这在状态第一次更改时起作用。但是第二次,没有调用父级的解析(可能是因为它们以前已经解析过) 这是状态配置Javascript ui路由器:父';状态更改时未调用s resolve,javascript,angularjs,angular-ui-router,Javascript,Angularjs,Angular Ui Router,在ui路由器中,当一个状态改变时,它应该调用它的所有父解析。这在状态第一次更改时起作用。但是第二次,没有调用父级的解析(可能是因为它们以前已经解析过) 这是状态配置 var app = angular.module('plunker', ['ui.router']); app.config(function($stateProvider) { $stateProvider .state('root', { abstract: true, resolve: {
var app = angular.module('plunker', ['ui.router']);
app.config(function($stateProvider) {
$stateProvider
.state('root', {
abstract: true,
resolve: {
preloadData: function() {
console.log("preloadData");
return true;
}
}
})
.state('root.home', {
resolve: {
test: function() {
console.log('Home')
return true;
}
}
})
.state('root.login', {
resolve: {
test: function() {
console.log('Login')
return true;
}
}
});
});
这是plnkr。打开dev控制台并单击按钮。您可以看到,preload data
仅在状态第一次更改时调用。对于将来的状态更改,不调用它
这种行为是有意的/正常的吗?有没有办法在每次状态更改时强制调用父级的Resolve?当您从“外部”状态(即相关状态的层次结构树之外的状态)转到特定状态(或其后代之一)时,会运行该状态的“Resolve”。然后,其子体和自身之间的导航不会重新运行“resolves”和控制器
换句话说,给定以下状态层次结构示例:
A B
/ /
AA C
/ \
C1 C2
然后,从A切换到B将运行B的控制器并“解析”,因为A在B树之外。然后切换到C(或C1或C2),然后再切换回B,不会重新运行B的解析
如果您随后切换回A(或AA),则A将运行解析。我认为唯一的方法是将所有解析附加到它们自己的状态,或者您有其他想法吗?@23tux,是的,如果需要对每个状态重新解析,这将是一个很好的方法。它在我的情况下不起作用:我有一个被拒绝的解决方案,因为我没有登录到某个状态。然后从外部状态登录并尝试转到第一个状态(层次结构之外),但它仍然被拒绝,并且没有调用我的提供者。有没有缓存之类的东西?@FabienHenon,听起来是另一个问题。。。发布一个新问题好的,我做到了: