我有一个看起来像这样的状态
.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()
打印任何内容,而是在oneValue
和twoValue
中显示$stateParams
和$state.params
}。当我刷新其相反的$location.search()
时,会正确显示参数及其值,但$stateParams
和$state.params
为空。
添加if语句并明确设置值可以解决我的错误,但这不能按预期工作吗?
我错过了一些明显的东西吗?答案 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。