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

时间:2015-05-04 19:17:00

标签: javascript angularjs angular-ui-router angular-routing

我有一个看起来像这样的状态

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

如果我使用

导航到模板中的此状态
ui-sref="home.foo.bar({one: valueOne, two: valueTwo})"

一切都很好,网址是

  

的.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
})

然后当我最初导航到模板中的状态时,日志语句不会为$location.search()打印任何内容,而是在oneValuetwoValue中显示$stateParams$state.params }。当我刷新其相反的$location.search()时,会正确显示参数及其值,但$stateParams$state.params为空。

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

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

我遇到了同样的问题。然而事实证明问题不是angular。检查服务器上的路由,可能会更改url

答案 2 :(得分:0)

在我的情况下,我干扰了常规statechange / statestart / statesuccess 所以在我解决状态成功的过程中,我添加了:

 //$state.go(toState,toParams);
 //when I manupulated the regular ui-router params 
 $state.go($rootScope.toState,$rootScope.toParams);

当您更改常规ui-router参数控件时,请注意传递给Params。