我想知道是否有可能在状态仍在加载时更改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;
}
});
}
}
有什么建议吗?感谢...
答案 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');
}
});
请注意,如果处理不当,可能会触发无限循环。