Angularjs $stateParams,用于url中仅包含queryParameters的状态
我有这样的州:Angularjs $stateParams,用于url中仅包含queryParameters的状态,angularjs,angular-ui-router,Angularjs,Angular Ui Router,我有这样的州: $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: nu
$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
}
});
$stateProvider.state('base'){
url:“/base”,
重定向到:“base.all”,
模板:“”
})
.state('base.all'{
父项:“基”,
url:“?someQuery&另一个”,
参数:{
someQuery:null,
另一个:空
},
观点:{
'': {
模板:“base.all”,
控制器:函数($stateparms){
console.log($stateParams.someQuery);//未定义
console.log($stateparms.other);//未定义
}
}
//一些观点
}
})
.state('base.all2'{
父项:“基”,
url:“/subPath?someQuery&other”,
参数:{
someQuery:null,
另一个:空
},
观点:{
'': {
模板:“base.all2”,
控制器:函数($stateparms){
console.log($stateParams.someQuery);//foo
console.log($stateparms.other);//条
}
}
//一些观点
}
});
我收听$stateChangeStart事件,并在出现重定向到
时执行$state.go
我现在的问题是如果我转到url/base?someQuery=foo&other=bar
它将正确转到base.all-state,但base.all-state的$stateParams
将为空。我不希望这个状态有子路径。如果子状态有自己的子路径,如/base/subPath?someQuery=foo&other=bar
,那么它只会将urlParameters设置为$stateparms,然后工作正常,所有内容都设置为$stateparms
我是否可以尝试创建一个没有子URL但只有queryParameters的子状态?如果是这样,怎么做?不使用
重定向到
并将父状态设置为抽象
就很简单了
我想我对重定向到的使用太盲目了
在路由/base
时,我没有收到任何警告,它似乎会自动找到状态base。所有的和一切都按预期工作。也许这超出了您的问题范围,为什么不使用基本参数呢?在base.all
状态中,您可以设置以下url:/{someQuery}/{other}
并且它应该执行jobNo,我们希望它们作为查询参数,以保持url的语义。谢谢你的建议!根据,您可以尝试为子状态定义绝对路由,方法是在其前面加上^
。因此,您的base.all
状态url看起来像^/base&someQuery&other
。我不知道这是否会起作用,因为url与父项的url相同…这听起来是一个非常好的主意,但不幸的是,它没有起作用..在您的$stateChangeStart侦听器中,您可以检查toStateParams和fromStateParams,并在删除toStateParams时使用fromStateParams重新填充它们。