2016-06-01 5 views
2

私はangular.jsの新機能で、機能はng-repeatです。私はng-repeat="x in name"を使用していますが、namesにいくつかの値を定義していますが、どこでも完全なコードでxを定義していませんでした。ここで angularJSでXがどのように価値を得ているのですか

は私のコードです:

<div ng-app="myApp" ng-controller="namesCtrl"> 

<ul> 
    <li ng-repeat="x in names"> 
    {{ x.name + ', ' + x.country }} 
    </li> 
</ul> 

</div> 

<script> 
angular.module('myApp', []).controller('namesCtrl', function($scope) { 
    $scope.names = [ 
     {name:'Jani',country:'Norway'}, 
     {name:'Hege',country:'Sweden'}, 
     {name:'Kai',country:'Denmark'} 
    ]; 
}); 
</script> 

すべてが正常に動作しているが、私は値がxに来ているか、私はちょうどxを呼び出していたとおりにng-repeatはここで何をやっているが、xに任意の値を定義していないか疑問。

+0

'ng-repeat'指示文がjavascriptの' for in'ループとして動作しています。 –

+0

'ng-repeat'はforeachループと似ていますが、@RohitJindalは' for 'を言ったようです。 'x'が各オブジェクトの値をとるように、オブジェクトの配列内のオブジェクトによってオブジェクトをループします。 – Alexis

答えて

4

xは、角度のng-repeatディレクティブで定義されています。 namesのすべての値を繰り返し、各値をxに順番にバインドします。

xではなく、他の有効な変数名を選択できます。

xの各値の間に矛盾がないのは、それぞれの反復がそれ自身の$scopeを取得するためです。

ng-repeat documentationも参照してください。

+0

私は 'ng-repeat'でxを使うことを余儀なくされました。 –

+0

'x'を他の有効な変数名に変更すると、' names'の各値が、あなたが選んだ名前の変数にインスタンス化されます。 –

1

私たちは$で始まるすべてのプロパティを無視し、このコードを使用して、指定されたコレクションへの参照を見てgit-hub ng-repeat.js

NG-リピート作品でコードを見に行きました。

 for (var itemKey in collection) { 
     if (hasOwnProperty.call(collection, itemKey) && itemKey.charAt(0) !== '$') { 
      collectionKeys.push(itemKey); 
     } 
    } 

と、コンパイル時にこの処理が行われます。

var match = expression.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/); 

これは、コレクション内のSOMETHINGであなたのNGリピート値で単語を分離し、おそらく最終的には、いくつかのTRACKBYとなります。 したがって、変数はngRepeatディレクティブ内で作成され、watchCollection時計を使用して監視されているコレクションを反復処理します。

SOMETHINGは、ngRepeatディレクティブの範囲内で定義されます。 COLLECTIONは実際にはユーザー$ scopeの参照になります。 SOMETHINGには任意の名前を選択できますが、COLLECTIONでは選択できません。

+0

Angularはその定義を取得し、最初に2つのグラブで文字列を解析し、ユーザースコープで定義された2番目のオブジェクトをスクロールする$ digestフェーズでカーソルとして機能する同じ名前の変数を作成します。変数は、繰り返しを実行するためだけに作成されているため、アクセス可能なままになりません。私はこれを作っている、それはこのように動作するはずです。 –

1

ng-repeatあなたのnames配列を繰り返し処理します。 反復処理される各オブジェクトは、テンプレートで指定した名前(場合によってはx)で表されます。 任意の名前を付けることができ、選択した配列のオブジェクトを表します。

2

ng-repeatディレクティブはfor inループのjavascriptと同じです。

ng-repeat="x in names"は、すべてのインデックスをnamesの配列に反復していることを意味します。

$scope.names = [ 
     {name:'Jani',country:'Norway'}, 
     {name:'Hege',country:'Sweden'}, 
     {name:'Kai',country:'Denmark'} 
    ]; 

両方が同じである:

for (var X in $scope.names) { 
    console.log($scope.names[X].name + ',' + $scope.names[X].country); 
} 

ng-repeat="x in names" 

xが角度のng-repeatディレクティブで定義されています。

関連する問題