【问题标题】:Find parent scope property in Controllers just like in Templates在控制器中查找父范围属性,就像在模板中一样
【发布时间】:2014-10-27 20:55:05
【问题描述】:

有没有一种简单的方法可以从控制器中读取定义在其中一个父作用域中的属性?正如文档解释的那样,就像 Angular 在模板中所做的那样:

当 Angular 评估 {{name}} 时,它首先查看与 name 属性的给定元素关联的范围。如果没有找到这样的属性,它会搜索父作用域,依此类推,直到到达根作用域。在 JavaScript 中,这种行为称为原型继承,子作用域原型从其父作用域继承。

但是这种行为不适用于控制器内部,如果你写 $scope.name 它只是在当前范围内查找。

【问题讨论】:

  • 你能展示代码示例吗,因为子作用域总是可以通过简单的方式从父作用域获取道具 $scope.someParentProp 或 {{someParentProp}},或者你可能有隔离作用域。
  • 和控制器完全一样。
  • 方法相同,属性不同
  • 1- 将window.scope = $scope 添加到您的控制器。 2-

标签: javascript angularjs


【解决方案1】:

很容易做到:$scope.$parent.name

请参阅底部的angular documentation 以供参考。

编辑

可以通过命名控制器来检索层次树中任何父级的范围属性:angularjs Access parent scope from child controller 并由命名的父级访问它们。

【讨论】:

  • 我知道这种解决方法,但如果属性位于上层,它就不起作用,我必须遍历 '$parent' 属性直到找到它。这就是为什么我要求一种更简单的方法。
  • 我认为命名控制器是一个丑陋的解决方案,在 OO 编程中你不需要指明父类名称来访问它的继承属性
  • JavaScript 不完全是一种 OO 编程语言,Angular 也不是。
  • 确实如此,但在本主题中模板和控制器之间的行为不同会令人困惑
  • 我当然可以理解!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-27
  • 1970-01-01
  • 1970-01-01
  • 2012-05-24
  • 1970-01-01
  • 2018-11-14
相关资源
最近更新 更多