2016-11-18 7 views
0

子コントローラがあります。親コントローラでは$scope.dealersが存在しますが、子コントローラでは存在しません。子コントローラに$scope.dealersがどのように存在する可能性がありますか? Closure$scopeでディーラーを持っていませんが子コントローラにスコーププロパティが存在しない場合は、

あなたはwatch式で見れば、あなたが表示されます$scope.dealersが存在します。

enter image description here

答えて

3

それは角度スコープの「機能」です。子スコープは、プロトタイプ的に親スコープから継承します。 https://docs.angularjs.org/guide/scopeから

- スコープは、角度が{{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

関連する問題