Angularjs $stateParams中缺少参数

Angularjs $stateParams中缺少参数,angularjs,angular-ui-router,state,Angularjs,Angular Ui Router,State,下面,我试图在$state中发送一个对象,并在$stateParams中检索它。我认为我做的是正确的,我也看到了许多网站和许多文章要求这样做。但是我无法在下一个控制器的$stateParams中获取它 我知道在这方面有很多问题,我也经历了很多。我还是被卡住了。 有人能看出我错在哪里吗 $scope.setup = function (ev, item, parent) { console.log("event", ev); console.log(

下面,我试图在
$state
中发送一个对象,并在
$stateParams
中检索它。我认为我做的是正确的,我也看到了许多网站和许多文章要求这样做。但是我无法在下一个控制器的
$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: {
                "main@": {
                    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                                                                             
                },
                "bar@": {
                    controller: 'AController',
                    templateUrl: 'comments.tpl.html'
                }
            }
            }
        });
    });

只有状态明确期望的参数才能通过
$stateParams
访问

在您的示例中,
“setup”
状态声明具有以下URL:
'/setup/:targetYear/:path'
,这意味着它需要
targetYear
path
参数

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

要传递第三个参数,可以在状态声明中的一个特殊
params
对象中声明它,并使用一些默认值(注意命名冲突——可能这就是造成混淆的原因?)

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

如果我是您,我会在上述状态声明和您的
$state.go
语句中将
params
重命名为
totalTradesInOverview
,以避免混淆


有关可应用于传递参数的更多选项,请参阅。

您的控制台错误是什么?另外,您是否已经为代码的完整视图设置了github repo?首先请确保。在执行$state.go()时,您正在正确设置变量。使用$stateparams激活url时,您是否只获得“params”值或“params”、“path”和“targetYear”值?您试图访问$stateparms的位置?我正在尝试访问即将到来的控制器(即TargetsSetupController)中的$stateparms。至于path和targetYear,我得到了这两个,因为正如您所看到的,我正在将它们附加到我的URL,并且它们正在被附加。但是,一旦加载了新状态,我希望从新控制器中的$stateParams检索“totalTradesInOverview”变量。唉!在那里,它表示undefinedYou指示在状态定义中传递一个param对象。但我想通过$state.go()中的控制器传递它。我把这个对象放在控制器中间的某个地方,然后我必须把它传递给下一个控制器。您建议如何将其保留在州定义中。我想我没听懂你的话。你能解释一下吗?首先,把你的状态定义改成我提供的(我省略了视图部分),然后检查它是否有效。如果是这样,我将尝试解释更多。此外,从您在问题下的评论中,我可以看出您希望该参数实际被调用
totalTradesInOverview
。然后,您应该在state(
params:{totalTradesInOverview:[]}
)和state.go:
$state.go('setup',{targetYear:$scope.targetYear,path:path,totalTradesInOverview:totalTradesInOverview})中这样命名它。
我按照您的要求修改了状态定义。现在我该如何从$state.go()传递我的对象目前我已将其更改为:
$state.go('targets.targets setup',{targetYear:$scope.targetYear,path:path,params:totalTradesInOverview})
如果您在$stateProvider.state中定义了
params:{params:[]}
,则调用
$state.go('setup',{targetYear:$scope.targetYear,path:path,params:totalTradesInOverview}
(与您在原始文章中所做的完全相同)并在下一个控制器中读取
$stateParams.params
$stateProvider.state('setup', {
    url: '/setup/:targetYear/:path',
    views: {...},
    params: {
        params: []
    }
});