Angularjs UI路由器:在加载状态时是否可以更改查询参数?
我想知道,当一个状态仍在加载时,是否可以在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()
$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。无论如何,我将数据存储在服务中,但在加载时,我需要首先检查服务,并根据情况重新加载,这似乎是人为的。只是能够改变参数是如此简单,也给了我更好的历史。。。