4 回答
TA贡献1797条经验 获得超6个赞
尽管jm-的答案是处理这种情况的最佳方法,但为了将来参考,可以使用范围的$$ childHead,$ childTail,$ nextSibling和$$ prevSibling成员来访问子范围。这些没有记录在案,因此它们可能会在不通知的情况下进行更改,但是如果您确实需要遍历作用域,它们就在那。
// get $$childHead first and then iterate that scope's $$nextSiblings
for(var cs = scope.$$childHead; cs; cs = cs.$$nextSibling) {
// cs is child scope
}
TA贡献2016条经验 获得超9个赞
您可以尝试以下方法:
$scope.child = {} //declare it in parent controller (scope)
然后在子控制器(作用域)中添加:
var parentScope = $scope.$parent;
parentScope.child = $scope;
现在,父母可以访问孩子的范围了。
TA贡献1815条经验 获得超6个赞
一种可能的解决方法是使用init函数将子控制器注入到父控制器中。
可能的实现:
<div ng-controller="ParentController as parentCtrl">
...
<div ng-controller="ChildController as childCtrl"
ng-init="ChildCtrl.init()">
...
</div>
</div>
ChildController您在哪里:
app.controller('ChildController',
['$scope', '$rootScope', function ($scope, $rootScope) {
this.init = function() {
$scope.parentCtrl.childCtrl = $scope.childCtrl;
$scope.childCtrl.test = 'aaaa';
};
}])
因此,现在ParentController您可以使用:
app.controller('ParentController',
['$scope', '$rootScope', 'service', function ($scope, $rootScope, service) {
this.save = function() {
service.save({
a: $scope.parentCtrl.ChildCtrl.test
});
};
}])
重要提示:
要正常工作,您必须使用指令ng-controller并使用as与我在html eg中相同的方式重命名每个控制器。
提示:在此过程中,
请使用chrome插件ng-inspector。它会帮助您理解树。
- 4 回答
- 0 关注
- 570 浏览
添加回答
举报