我有一个基础应用ui路由器状态的应用...
$stateProvider.state('app', {
navigationTitleKey : 'app',
abstract: true,
url: '/?{param}',
views: obj
});
然后是child
和grand-child
州......
$stateProvider.state('app.wizardchild', {
parent: 'app',
url: '/wizard',
resolve: {
wizard: ['wizard',function(wizard) {
return new wizard();
}],
},
$stateProvider.state('app.wizardgrandchild', {
parent: 'app.wizardchild'
}
当我这样做时......
来自$state.go('app.wizardgrandchild')
的 app.wizardchild
它按预期工作,向导只解析了一次。
但是当我从$state.go('app.wizardgrandchild', {param:'blah'})
app.wizardchild
时
重新运行解析块意味着grand-child
状态下有一个新的向导副本。但我不希望这种情况发生,我希望它是相同的,而不是创建另一个副本。有没有办法关闭这种行为?
答案 0 :(得分:0)
尝试将wizard
注册为服务(非工厂)。由于所有Angular服务都是单例服务,它应该可以解决您的问题。现在,每次使用new
创建向导的新实例时 - 如果使用服务,Angular将自动创建一个实例并在每次需要时注入它(每次注入相同的实例时)
答案 1 :(得分:0)
您的param
已在app
州宣布。状态参数更改时,将使用新参数值重新加载。当一个州重新加载时,它的所有孩子也会重新加载。
如果可以将参数声明移动到孙子状态,那么应解决问题。
或者,您可以将param
保留在应用状态和mark it as dynamic
上。动态参数不会导致状态重新加载。
$stateProvider.state('app', {
navigationTitleKey : 'app',
abstract: true,
url: '/?{param}',
params: { param: { dynamic: true } },
views: obj
});
如果您正在使用ui-router legacy(0.x),there is reloadOnSearch
类似,但可能有错误。
$stateProvider.state('app', {
navigationTitleKey : 'app',
abstract: true,
url: '/?{param}',
reloadOnSearch: false,
views: obj
});