ui-router在页面刷新后没有看到url搜索参数

Mar*_*ark 5 javascript angularjs angular-routing angular-ui-router

我的状态看起来像这样

.state('home.foo.bar', {
  url: 'view?one&two',
  views: {
    'base': {
      templateUrl: 'blah',
      controller: 'blahCtrl'
    }
  },
  reloadOnSearch: false
})
Run Code Online (Sandbox Code Playgroud)

如果我在我的模板中导航到这个状态

ui-sref="home.foo.bar({one: valueOne, two: valueTwo})"
Run Code Online (Sandbox Code Playgroud)

一切都很好,网址是

的.com /查看?一个= valueOne&2 = valueTwo

但是,如果我刷新页面,则网址将更改为.com/view,并且不会包含$state.params$stateParams包含值.

如果我添加这样的解决步骤

.state('home.foo.bar', {
  url: 'view?one&two',
  views: {
    'base': {
      templateUrl: 'blah',
      controller: 'blahCtrl'
    }
  },
  resolve: {
    p: function($location, $stateParams, $state) {
      console.log($location.search(), $stateParams, $state);
      if(!$stateParams.one && !$stateParams.two {
        $stateParams.one = $location.search().one;
        $stateParams.two = $location.search().two;
      } else {
        return $location.search().one;
      }
    }
  },
  reloadOnSearch: false
})
Run Code Online (Sandbox Code Playgroud)

然后当我最初导航到我的模板中的状态时,日志语句不$location.search()显示任何内容,只显示oneValuetwoValue$stateParams$state.params.当我刷新它的反面$location.search()显示的参数和它们的值正确,但$stateParams$state.params是空的.

添加if语句并明确设置值可以解决我的错误,但这不能按预期工作吗?

我错过了一些明显的东西吗

Tho*_*och 1

我认为这可能是因为您在开头或网址中缺少斜杠:

.state('home.foo.bar', {
  url: '/view?one&two',
  views: {
    'base': {
      templateUrl: 'blah',
      controller: 'blahCtrl'
    }
  },
  reloadOnSearch: false
})
Run Code Online (Sandbox Code Playgroud)