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重新填充它们。