2016-11-18 57 views
0

我有一個子控制器。在父控制器$scope.dealers存在,但不在子控制器中。子控制器中存在$scope.dealers怎麼可能?範圍屬性存在於子控制器中時它不應該

如果你看看watch表達式,你會看到$scope.dealers存在,而在Closure$scope沒有經銷商。它的父

enter image description here

回答

3

它的角範圍的「功能」。子範圍原型從父範圍繼承。

https://docs.angularjs.org/guide/scope - 範圍層次部分

當角計算{{name}},它首先着眼於與name屬性指定的元素相關聯的範圍。如果沒有找到這樣的屬性,它將搜索父作用域,依此類推,直到達到根作用域。在JavaScript中,這種行爲被稱爲原型繼承,子範圍原型繼承父母。

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> 

退房的角風格指南:https://github.com/johnpapa/angular-styleguide

相關問題