2016-05-14 17 views
2

同じ名前でNGリピートのコントローラ変数にアクセスしようとしています。例: AngularJs - アクセススコープ変数NGリピートで同じ名前を持つ

コントローラ

$scope.items = [1,2,3,4,5]; 

$scope.a = { 
    data: "Some Data" 
}; 

ビュー

<div ng-repeat="a in items"> {{ a }} - {{ $parent.a.data }} </div> 

が、それは動作しません。同じ名前のng-repeat内のその変数(Object)にアクセスすることは可能ですか?それを作るために

答えて

3

一つの方法は、お使いのコントローラ(いくつかの例here in doc)を命名することにより、変数にアクセスしています。

<div ng-repeat="a in ctrl.items"> {{ a }} - {{ ctrl.a.data }} </div>

そして、あなたのコントローラ中:

app.controller('TestCtrl', function($scope) { 
    var self = this; 
    self.items = [1,2,3,4,5]; //brackets here, not curly brackets as said by @georgeawg 
    self.a = { 
     data: "Some Data" 
    }; 

    // Rest of you code 
}); 

あなたが次にng-controller="TestCtrl as ctrl"

のようなあなたのコントローラに名前を付けることができ

、あなたのビューでいくつかの変更を必要とします最後に、ナミコントローラはかなり良い方法です。

はそれが役に立てば幸い!あなたは配列をする$scope.itemsをする場合

1

は、角括弧ではなく、中括弧を使用します。

//Do THIS 
$scope.items = [1,2,3,4,5]; 
//NOT THIS 
$scope.items = {1,2,3,4,5}; 

あなたng-repeatイテレータは何もすることができます。親スコープ変数をオーバーロードする必要はありません。

<div ng-repeat="anything in items"> {{ anything }} - {{ a.data }} </div> 

親変数がオーバーロードされていない場合も、$parentを使用する必要はありません。 prototypically ng-repeatで繰り返し要素で

変数は、親スコープから継承します。詳細については、What are the nuances of scope prototypal/prototypical inheritance in AngularJS?

を参照してください。
関連する問題