我的状态如下:
$stateProvider.state('base', {
url: '/base',
redirectTo: 'base.all',
template: '<div ui-view></div>'
})
.state('base.all', {
parent: 'base',
url: '?someQuery&another',
params: {
someQuery: null,
another: null
},
views: {
'': {
template: '<div>base.all</div>',
controller: function($stateParams){
console.log($stateParams.someQuery);//undefined
console.log($stateParams.another);//undefined
}
}
//some views
}
})
.state('base.all2', {
parent: 'base',
url: '/subPath?someQuery&another',
params: {
someQuery: null,
another: null
},
views: {
'': {
template: '<div>base.all2</div>',
controller: function($stateParams){
console.log($stateParams.someQuery);//foo
console.log($stateParams.another);//bar
}
}
//some views
}
});
我听取$ stateChangeStart事件,并在$state.go
出现时执行redirectTo
。
我现在的问题是如果我去url / base?someQuery = foo&amp; another = bar
它将正确转到base.all-state,但base.all-state的$stateParams
将为空。我不希望这个状态有一个subPath。子状态只会将urlParameters设置为$ stateParams,如果它有自己的子路径,如/base/subPath?someQuery=foo&another=bar
那么它工作正常,一切都设置为$ stateParams。
我是否尝试使用没有subUrl的子状态,但只有queryParameters可能吗?如果是这样的话?
答案 0 :(得分:1)
不使用redirectTo
并将父状态设置为abstract
一样简单。
我认为我对redirectTo
的使用太盲目了。
我在路由/base
时没有收到任何警告,它似乎会自动找到状态base.all
,一切都按预期工作。