$ stateParams中缺少参数

时间:2015-09-18 11:34:14

标签: angularjs angular-ui-router state

在此处,我正在尝试发送$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: {
                "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'
                }
            }
            }
        });
    });

1 个答案:

答案 0 :(得分:3)

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

在您的示例中,您的"setup"州声明包含以下网址:'/setup/:targetYear/:path',这意味着它需要targetYearpath个参数。

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

要传递第三个参数,您可以在状态声明中的特殊params对象中声明它,并使用一些默认值(注意命名冲突 - 也许这是您混淆的来源?):

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

现在{$ 1}}参数应该在$ stateParams中可见。

如果我是你,我会在上述州声明和params声明中将params重命名为totalTradesInOverview,以避免混淆。

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