我需要传递和接收两个参数的状态,我想转让使用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:
你可以检查它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