不应该在子控制器中存在Scope属性

时间:2016-11-18 21:47:48

标签: angularjs

我有一个儿童控制器。在父控制器$scope.dealers存在,但不在子控制器中。如何在子控制器中存在$scope.dealers

如果您查看watch表达式,$scope.dealers Closure中没有经销商,您会看到$scope存在。

enter image description here

2 个答案:

答案 0 :(得分:3)

它是一个"功能"角度范围。子范围原型继承自父范围。

来自https://docs.angularjs.org/guide/scope - 范围层次结构部分

  

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

答案 1 :(得分:1)

子控制器将继承其父级的范围。因此,如果您在父作用域中定义$scope.dealers,它将作为$scope.dealers存在于子作用域中。

此外,这可能会引起很多混乱,作为一般做法,我尽量避免嵌套控制器。这也是为什么在许多情况下使用控制器对象本身比使用示波器更好的方法。

app.controller('MyController', function($scope) {
  var vm = this;
  vm.dealers = [];  // this won't clash with parent scope
  //$scope.dealers = [];
});

您仍然可以在模板中引用它:

<ul>
  <li ng-repeat="dealer in vm.dealers"></li>
</ul>

查看Angular样式指南:https://github.com/johnpapa/angular-styleguide