当前位置: 首页 > 面试题库 >

AngularJS-访问子范围

郭修平
2023-03-14
问题内容

如果我有以下控制器:

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


问题答案:

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

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

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

您的解决方案:

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


 类似资料:
  • 我尝试注入$scope,然后使用,但这不起作用? 有人能提供建议吗?

  • 问题内容: 我正在尝试查看是否存在通过外部javascript函数访问控制器内部范围的简单方法(与目标控制器完全无关) 我在其他几个问题上看到 会从DOM元素中检索范围,但是我的尝试目前未产生正确的结果。 这是jsfiddle:http : //jsfiddle.net/sXkjc/5/ 我目前正在经历从纯JS到Angular的过渡。我试图实现这一目标的主要原因是要保持原始库代码尽可能完整。无需我

  • 问题内容: 我通过这种方式将值传递给自定义过滤器: 我也想在其中注入几个范围变量,就像我在指令中可以做的那样。不必将这些var作为函数参数显式传递就可以做到这一点吗? 问题答案: 显然可以。 通常,您会将范围变量作为函数参数传递给过滤器: 但是,要传递当前范围,您必须传递: 并将引用当前范围: 简化: 警告: 请注意这一点,并仅使用范围读取过滤器中的值,否则您将很容易在$ digest循环中发现自

  • 问题内容: 如何从ui网格单元模板进行访问?这是我的控制器代码: 在此处查看其运行情况:http : //plnkr.co/edit/WYXeQShHWKDYDs4MIZnP?p=preview 我希望单元格内容显示“ hello world”,但它们仅显示“ hello”。 问题答案: 根据http://ui-grid.info/docs/#/tutorial/305_appScope,网格具有

  • 我正在使用Android Jetpack(2.2.0-alpha01)的导航组件。 我希望使用嵌套在主NavHostFragment中的子NavHostFragment,该子NavHostFragment配备了它自己的子nav图。有关上下文,请查看下面的图像: 子nav主机在mainnavhost堆栈前面的片段中定义如下: 如何访问子navHostFragment作用域ViewModel?谢谢你抽

  • 问题内容: 我的页面有多种形式,一次只想显示一个即可。为此,我将每种形式分成一个部分,并使用Bootstrap的手风琴插件一次只允许一个打开的部分。 我的标记看起来像这样: 一切正常,我可以在表单之间导航。 因为我不希望用户打开当前正在编辑的部分包含验证错误的部分,所以我尝试检查函数是否与其关联的表单有效。 我尝试过,但是我做不到。我无法访问负责页面的控制器中与表单关联的FormControlle