我想获取控制器中$ stateParams对象中某个属性的值。我似乎能够获得$ stateParams对象作为一个整体,但我无法得到一个特定的属性。
$rootScope.params = $stateParams; // this gets me the object
$rootScope.myVar = $stateParams.fooParam + ' some msg'; // this gets me undefined
这就是我设置$ stateProvider的方式......
$stateProvider
.state('parent', {
url: "/parent",
templateUrl: 'tpl.html',
params: {
fooParam: 'foo defult',
barParam: 'bar defult'
},
controller: 'ParentCtrl'
})
然后在我的html ui-sref路线中,我将一些东西传递给参数。
<a ui-sref="parent({
fooParam:'foo parent',
barParam:'bar parent'
})">parent</a>
然后在我的控制器中我想访问那些参数。这里是truggle访问$ stateParams对象的成员。
$rootScope.myVar = $stateParams.fooParam + ' some msg';
在我的HTML中,如果我致电{{myVar}},我只是得到了#34;未定义的一些消息&#34;
基本上在这个特定的例子中,我想在控制器中获取fooParam的值。我不明白该怎么做。
这是我的问题示例中的一个人物:
答案 0 :(得分:2)
实际上,我错了。您需要在URL中包含params,如下所示:
$stateProvider
.state('parent', {
url: "/parent/:fooParam/:barParam",
params: {
fooParam: 'foo defult',
barParam: 'bar defult'
},
templateUrl: 'tpl.html',
controller: 'ParentCtrl'
})
但另一个问题是您需要从为该状态注册的控制器访问$ stateParams ,该文件在文档的gotchas section中列出。
查看更新plunker显示myVar来自$ stateParams注入控制器(工作正常)和MyVar2来自$ stateParams注入app.run()函数(不能正常工作)。
答案 1 :(得分:1)
您可以将$ stateParams直接注入控制器。如下更改您的控制器。
.controller('ParentCtrl', ['$scope','$stateParams', function($scope,$stateParams)
这是Plunker https://plnkr.co/edit/PVXGjFLMVQdvxUHp1rgs?p=preview