如果我有以下控制器:
function parent($scope, service) {
$scope.a = 'foo';
$scope.save = function() {
service.save({
a: $scope.a,
b: $scope.b
});
}
}
function child($scope) {
$scope.b = 'bar';
}
Run Code Online (Sandbox Code Playgroud)
什么是让你parent读b出来的正确方法child?如果有必要定义b中parent,也不会使它语义上不正确假设b是描述相关的东西的属性child,而不是parent?
更新:进一步思考它,如果有一个以上的孩子b,它将产生一个冲突parent,b以便检索.我的问题是,什么是访问的正确方法是b从parent?
jai*_*ime 161
AngularJS中的范围使用原型继承,当在子范围内查找属性时,解释器将从子项开始查找原型链并继续查看父项,直到找到属性,而不是相反.
查看Vojta对该问题的评论https://groups.google.com/d/msg/angular/LDNz_TQQiNE/ygYrSvdI0A0J
简而言之:您无法从父作用域访问子作用域.
你的解决方案
$emit将事件向上发送给父级,直到根范围并向下$broadcast发送事件.这可能有助于您保持语义正确.Jus*_*nen 80
虽然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
}
Run Code Online (Sandbox Code Playgroud)
小智 48
你可以试试这个:
$scope.child = {} //declare it in parent controller (scope)
Run Code Online (Sandbox Code Playgroud)
然后在子控制器(范围)中添加:
var parentScope = $scope.$parent;
parentScope.child = $scope;
Run Code Online (Sandbox Code Playgroud)
现在父母可以访问孩子的范围.
| 归档时间: |
|
| 查看次数: |
153040 次 |
| 最近记录: |