一尘不染

AngularJS-访问子范围

angularjs

如果我有以下控制器:

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

更新:
对此进行进一步的思考,如果一个孩子有多个孩子b,将会parentb检索上产生冲突。我的问题是,什么是访问的正确方法是bparent


阅读 194

收藏
2020-07-04

共1个答案

一尘不染

AngularJS中的作用域使用原型继承,当在子作用域中查找属性时,解释器将从子对象开始查找原型链,并继续寻找父对象,直到找到该属性为止,而不是相反。

查看Vojta对此问题的评论https://groups.google.com/d/msg/angular/LDNz_TQQiNE/ygYrSvdI0A0J

简而言之:您不能从父范围访问子范围。

您的解决方案:

  1. 在父母中定义属性并从孩子那里访问它们(阅读上面的链接)
  2. 使用服务共享状态
  3. 通过事件传递数据。$emit向父级向上发送事件,直到根作用域$broadcast向下发送事件为止。这可以帮助您保持语义上正确。
2020-07-04