当$ stateParams确实可用时,有人可以解释一下吗?

时间:2016-10-26 17:27:38

标签: angularjs angular-ui-router

我正在尝试初始化一个需要$ stateParams的子状态变量。

为此,我使用以下内容注册了州:

$stateProvider
    .state('parent', {
        abstract: true,
        url: '/parent',
        template: '<div ui-view></div>',
        controller: 'ParentCtrl',
    }).state('parent.child', {
        url: '/:id',
        templateUrl: 'template.html',
        controller: function ($scope) {
            $scope.someFunction();
        },
    });

这是我的控制者:

module.controller('ParentCtrl', [
    '$scope', '$stateParams',
    function ($scope, $stateParams) {
        //calling a function in the scope inherited from parent controller
        $scope.someFunction = function () {
            //$stateParams isn't available.
        }
    }]);

但是当someFunction被调用时,$ stateParams中的params是未定义的。

但是,如果不是从ParentCtrl调用函数,而是从状态控制器内部运行,如下所示:

$stateProvider
    .state('parent', {
        abstract: true,
        url: '/parent',
        template: '<div ui-view></div>',
        controller: 'ParentCtrl',
    })
    .state('parent.child', {
        url: '/:id',
        templateUrl: 'template.html',
        controller: function ($scope, $stateParams) {
            //$stateParams is available
        },
    });

我可以访问$ stateParams上的参数。

有人能解释我为什么吗?

1 个答案:

答案 0 :(得分:0)

我已经知道了。它实际上非常简单:问题是我从子状态调用父状态控制器中的一个函数,它使用父状态$ stateParams(当然)没有正确的参数。

所以为了使它工作,我必须在父控制器中注入子状态参数,如下所示:

$stateProvider
.state('parent', {
    abstract: true,
    url: '/parent',
    template: '<div ui-view></div>',
    controller: 'ParentCtrl',
}).state('parent.child', {
    url: '/:id',
    templateUrl: 'template.html',
    controller: function ($scope, $stateParams) {
        $scope.someFunction($stateParams);
    },
});

开始回答Mahesh的评论,引导我得出这个结论。