$ stateParams表示其url中只有queryParameters的状态

时间:2016-03-18 11:08:18

标签: 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: 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可能吗?如果是这样的话?

1 个答案:

答案 0 :(得分:1)

不使用redirectTo并将父状态设置为abstract一样简单。

我认为我对redirectTo的使用太盲目了。

我在路由/base时没有收到任何警告,它似乎会自动找到状态base.all,一切都按预期工作。