Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs UI路由器:在加载状态时是否可以更改查询参数?_Angularjs_Angular Ui Router_Url Routing - Fatal编程技术网

Angularjs UI路由器:在加载状态时是否可以更改查询参数?

Angularjs UI路由器:在加载状态时是否可以更改查询参数?,angularjs,angular-ui-router,url-routing,Angularjs,Angular Ui Router,Url Routing,我想知道,当一个状态仍在加载时,是否可以在ui路由器中更改查询参数 我是按照以下思路思考的,但这不起作用 $stateProvider .state('foo',{ url:'/foo?bar', templateUrl:'app/foo.html', controller: 'fooController as foo', resolve: { Resource: function($state) { return somepromise()

我想知道,当一个状态仍在加载时,是否可以在ui路由器中更改查询参数

我是按照以下思路思考的,但这不起作用

$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;
          }
      });
    }
  }

有什么建议吗?谢谢…

你可以在州声明中处理我更喜欢这种方式

.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路由中定义的事件在状态开始更改时重定向

通常我把这些东西放在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');
        }
    });

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

如果您执行一些“重定向”,而不是$state.params.bar='newValue'$state.go'foo',{'bar':'newValue};你到底想实现什么,实际上是改变url吗?@charlietfl这就是我想要实现的。用户指定一些路由/foo以及她希望如何查看数据栏。如果加载route/foo时返回有用的数据,但有助于格式化?bar,我仍然希望以不同的格式显示数据,即bar的不同值@Anfelipe我首先尝试了您的建议,但这似乎触发了数据重新获取,因为它将重新加载状态foo。这就是我想要避免的。$state.go‘bar’会让我进入一个酒吧状态。我想你指的是$state.go'foo',{'bar':'newValue'};。但问题是,正如我在上面的评论中提到的,它会触发foo的重新加载,这基本上是我想要避免的服务器的重新读取。我认为具有不同参数的状态会被视为不同的状态,因此它会触发重新加载。也许您需要切换子状态而不是状态参数?您也可以将数据存储在服务中,这是一种常见的做法,因此重新加载控制器不会重新加载数据。是的,这是我的计划B。无论如何,我将数据存储在服务中,但在加载时,我需要首先检查服务,并根据情况重新加载,这似乎是人为的。只是能够改变参数是如此简单,也给了我更好的历史。。。