如何从控制器修改$ stateParams对象中的变量?

时间:2016-01-29 21:15:32

标签: angularjs

我想获取控制器中$ 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的值。我不明白该怎么做。

这是我的问题示例中的一个人物:

https://plnkr.co/edit/dXTgKMpBTHiv2Bt5nFxC?p=preview

2 个答案:

答案 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