UI-Router:是否可以在加载状态时更改查询参数?

时间:2015-10-21 02:49:15

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

我想知道是否有可能在状态仍在加载时更改ui-router中的查询参数。

我正在考虑以下几行,但这不起作用......

$stateProvider
.state('foo',{
  url:'/foo?bar',
  templateUrl:'app/foo.html', 
  controller: 'fooController as foo',
  resolve: {
    Resource: function($state) {
      return somepromise()
        .then(function(baz) {
          if (baz !== some condition) {
            $state.params.bar = 'newValue';
            return;
          }
      });
    }
  }

有什么建议吗?感谢...

1 个答案:

答案 0 :(得分:0)

你可以在状态声明中处理它(我更喜欢这种方式)

.state('foo', {
    url: "/foo?bar", // not sure if this kind of url can be used
    template: "",
    controller: ['$state', function ($state, $stateParams) {
        if ($stateParams.bar == 'something') {
            $state.go('bar');
        }
    }]
})

或者,您可以使用ui-route

中定义的事件在状态开始更改时重定向

通常我把这些东西放在HomeController

$rootScope.$on('$stateChangeStart',
    function (event, toState, toParams, fromState, fromParams) {
        //console.log("state change:", fromState.name, fromParams, toState.name, toParams);
        if (toState.name == 'foo' && toParams.bar == 'something') {
                $state.go('bar');
        }
    });

请注意,如果处理不当,可能会触发无限循环。