我正在尝试初始化一个需要$ 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上的参数。
有人能解释我为什么吗?
答案 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的评论,引导我得出这个结论。