子コントローラがあります。親コントローラでは$scope.dealers
が存在しますが、子コントローラでは存在しません。子コントローラに$scope.dealers
がどのように存在する可能性がありますか? Closure
$scope
でディーラーを持っていませんが子コントローラにスコーププロパティが存在しない場合は、
あなたはwatch
式で見れば、あなたが表示されます$scope.dealers
が存在します。
子コントローラがあります。親コントローラでは$scope.dealers
が存在しますが、子コントローラでは存在しません。子コントローラに$scope.dealers
がどのように存在する可能性がありますか? Closure
$scope
でディーラーを持っていませんが子コントローラにスコーププロパティが存在しない場合は、
あなたはwatch
式で見れば、あなたが表示されます$scope.dealers
が存在します。
それは角度スコープの「機能」です。子スコープは、プロトタイプ的に親スコープから継承します。 https://docs.angularjs.org/guide/scopeから
- スコープは、角度が{{name}}
を評価するとき、それは最初の名前プロパティの指定された要素に関連するスコープで見える部分
を階層。そのようなプロパティが見つからない場合は、ルートスコープに達するまで親スコープなどを検索します。 JavaScriptでは、この動作はプロトタイプの継承と呼ばれ、子スコープはプロトタイプ的に親から継承します。
子コントローラは、それの親のスコープを継承します。したがって、親スコープに$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