AngularJS - 访问子范围?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (21)

如果我有以下控制器:

function parent($scope, service) {
    $scope.a = 'foo';

    $scope.save = function() {
        service.save({
            a:  $scope.a,
            b:  $scope.b
        });
    }
}

function child($scope) {
    $scope.b = 'bar';
}

有什么正确的方法让parentb出来child?如果有必要定义bparent,也不会使它语义上不正确假设b是描述相关的东西的属性child,而不是parent

提问于
用户回答回答于

在AngularJS中的范围使用原型继承,当在子范围内查找属性时,解释器将从子开始查找原型链,继续到父类,直到找到属性,而不是相反。

简而言之:无法从父范围访问子范围。

解决方案:

  1. 在父母中定义属性并从儿童访问它们(请阅读上面的链接)
  2. 使用服务共享状态
  3. 通过事件传递数据。$emit将事件向上发送给父母,直到根范围并向下$broadcast发送事件。这可能会帮助你保持语义上的正确。
用户回答回答于

但为了将来的参考,可以使用作用域的$$ 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
}

扫码关注云+社区