我需要传递和接收两个参数的状态,我想转让使用ui-sref的ui路由器。
类似下面的链接使用foo和bar参数将状态转换到home:
<a ui-sref="home({foo: 'fooval',bar: 'barVal'})">Go to home state with foo and bar parameters </a>
在控制器中接收foo和bar值:
app.controller('SomeController',function($scope,$stateParam) {
//..
var foo = $stateParam.foo; //getting fooval
var bar = $stateParam.bar; //getting barVal
//..
});
我得到未定义的$ stateParam在控制器。
有人可以帮助我明白如何完成吗?
编辑:
.state('home',{
url: '/',views: {
'': {
templateUrl: 'home.html',controller: 'MainRootCtrl'
},'A@home': {
templateUrl: 'a.html',controller: 'MainCtrl'
},'B@home': {
templateUrl: 'b.html',controller: 'SomeController'
}
}
});
我创建了一个
example来展示如何。更新的状态定义为:
$stateProvider
.state('home',{
url: '/:foo?bar',views: {
'': {
templateUrl: 'tpl.home.html',controller: 'MainRootCtrl'
},...
}
这将是控制器:
.controller('MainRootCtrl',$state,$stateParams) {
//..
var foo = $stateParams.foo; //getting fooval
var bar = $stateParams.bar; //getting barVal
//..
$scope.state = $state.current
$scope.params = $stateParams;
})
我们可以看到,状态家现在有url定义为:
url: '/:foo?bar',
这意味着,url中的参数是预期的
/fooval?bar=barValue
这两个链接将正确地传递参数到控制器:
<a ui-sref="home({foo: 'fooval1',bar: 'barVal1'})">
<a ui-sref="home({foo: 'fooval2',bar: 'barVal2'})">
此外,控制器消耗$ stateParams而不是$ stateParam。
链接到doc:
> URL Parameters
你可以检查它here
params:{}
还有新的,更细粒度的设置参数:{}。正如我们已经看到的,我们可以将参数声明为url的一部分。但是通过params:{}配置 – 我们可以扩展这个定义,甚至引入不是url的一部分的参数:
.state('other',{
url: '/other/:foo?bar',params: {
// here we define default value for foo
// we also set squash to false,to force injecting
// even the default value into url
foo: {
value: 'defaultValue',squash: false,},// this parameter is Now array
// we can pass more items,and expect them as []
bar : {
array : true,// this param is not part of url
// it Could be passed with $state.go or ui-sref
hiddenParam: 'YES',...
参数的可用设置在$stateProvider的文档中描述
下面是一个提取
> value – {object | function =}:指定此参数的默认值。这隐式将此参数设置为可选…
> array – {boolean =}:(default:false)如果为true,param值将被视为一个值数组。
> squash – {bool | string =}:squash配置当前参数值与默认值相同时,如何在URL中表示默认参数值。
我们可以这样调用这些参数:
// hidden param cannot be passed via url
<a href="#/other/fooval?bar=1&bar=2">
// default foo is skipped
<a ui-sref="other({bar: [4,5]})">
检查它在行动here