2015-09-18 41 views
2

在这里,我试图发送一个对象$state并在$stateParams中检索它。我认为我做得很对,也见过很多网站和很多要求这样做的文章。但是我无法在下一个Controller中使用$stateParams

我知道有很多这方面的问题,我经历了很多。我仍然陷入困境。 有人可以看到我错了吗?

$scope.setup = function (ev, item, parent) { 
      console.log("event", ev); 
      console.log("item", item); 
      console.log("parent in clusters", parent); 

      ev.preventDefault(); 
      if(item!==null){ 
      var path = parent.id + '.' + item.code; 
      path = path.replace(/\s+/g, '').toUpperCase();; 
      if (!$(ev.target).closest('a').is('[disabled]')) { 
       $rootScope.child = item; 
       $rootScope.parent = parent; 
       console.log("parent", $rootScope.parent); 
       $state.go('setup', { 
        targetYear: $scope.targetYear, 
        path: path 
        // ,'child': item, 
        // 'parent': parent 

       }); 
      } 
      } 
      else { 
       console.log("trade in trade", parent); 
       console.log("items from scope", $scope.items); 
       var path = parent.name.trim(); 
       path = path.replace(/\s+/g, '').toUpperCase(); 
       var totalTradesInOverview = $scope.items; 
       console.log("parent", $rootScope.parent); 
       $state.go('setup', { 
        targetYear: $scope.targetYear, 
        path: path, 
        params: totalTradesInOverview 


       }); 

      } 
     }; 

我想我应该直接在$stateParams在另一个控制器。我错了吗?

下面是我的国家声明的一部分,如果该事项很多:

由国家明确预期
module.config(function ($stateProvider) { 
     $stateProvider.state('setup', { 
      url: '/setup/:targetYear/:path', 
      views: { 
       "[email protected]": { 
        controller: 'TargetsSetupController as model', 
        templateUrl: 'app/targets/setup/setup.tpl.html', 
        // params: params 
        //I tried even this passing that variable in params like // params: totalTradesInOverview                    
       }, 
       "[email protected]": { 
        controller: 'AController', 
        templateUrl: 'comments.tpl.html' 
       } 
      } 
      } 
     }); 
    }); 
+0

什么是您的控制台错误?您是否还有一个github回购协议,用于完整查看您的代码? –

+0

首先确认。执行$ state.go()时,您正在设置变量。 –

+0

您是否使用$ stateParams获取“params”值或“params”,“path”和“targetYear”值 –

回答

2

参数只有通过$stateParams访问。

在您的示例中,您的"setup"状态声明具有以下URL:'/setup/:targetYear/:path',这意味着它预计参数为targetYearpath

您正试图传递第三个参数(params),并且它不可见,因为它不是预期的。

要传递的第三个参数,你可以在你的国家声明中的特殊params对象声明它,有一些默认值(注意命名冲突 - 也许这是你的问题的根源?):

$stateProvider.state('setup', { 
    url: '/setup/:targetYear/:path', 
    views: {...}, 
    params: { 
     params: [] 
    } 
}); 

现在params参数应该在$ stateParams中可见。

如果我是你,我会在上面的状态声明和$state.go声明中将params改为totalTradesInOverview以避免混淆。

另请参阅$stateProvider.state documentation了解更多选项,您可以将其应用于传递的参数。

+0

您指示在状态定义中传递一个param对象。但是我想通过$ state.go()中的控制器传递它。我在我的控制器的某个地方得到了这个对象,然后我必须将它传递给下一个控制器。 你打算如何保持它在状态定义已经。我想我没有跟着你。你能解释一下吗? –

+0

首先,只需将您的状态定义更改为我提供的状态(我忽略了视图部分)并检查它是否有效。如果是这样,我会试着解释更多。 – DzinX

+0

此外,从您的问题的评论我可以看到你期望的参数实际上被称为'totalTradesInOverview'。然后,你应该在状态('params:{totalTradesInOverview:[]}')和state.go中命名它:''state.go('setup',{targetYear:$ scope.targetYear,path:path ,totalTradesInOverview:totalTradesInOverview})' – DzinX