2016-06-01 79 views
2

我是angular.js的新用戶,只是在函數ng-repeat上工作。其中我使用的是ng-repeat="x in name",其中我定義了names中的一些值,但我沒有在完整代碼中的任何位置定義x。X如何在angularJS中獲得價值

這裏是我的代碼:

<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未來或究竟ng-repeat是在這裏做,因爲我只是想問xx沒有定義任何值。

+0

'ng-repeat'指令在JavaScript中用作for in循環。 –

+0

'ng-repeat'就像是一個foreach循環,或者像@RohitJindal所說的'for in'。它通過一個對象數組中的對象循環對象,所以'x'取得每個對象的值。 – Alexis

回答

4

x由angular的ng-repeat指令定義。它遍歷names中的所有值並將每個值依次綁定到x

請注意,您可以選擇任何其他有效的變量名稱而不是x

每個值x之間沒有衝突的原因是每個迭代都有自己的$scope。請參閱ng-repeat documentation

+0

所以我不得不在'ng-repeat'中使用x或者我可以使用任何其他變量? –

+0

您可以將'x'更改爲任何其他有效的變量名稱,然後'names'中的每個值將被實例化爲具有您選擇的名稱的變量。 –

1

我去觀看的參考,我們使用此代碼,忽略所有以一個$開始屬性指定的集合看到代碼在git-hub ng-repeat.js

伍重複的作品。

 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*$/); 

這將在分類收集在你的NG-重複值詞語的東西,可能與最終一些TRACKBY。 因此,在ngRepeat指令中創建一個變量來遍歷我們使用watchCollection手錶正在觀看的集合。

SOMETHING將在ngRepeat指令的範圍內定義。 COLLECTION實際上是用戶$範圍的參考。 你幾乎可以選擇你想要的任何名字,但不適合COLLECTION。

+0

Angular獲取它的定義,解析2中的字符串獲取第一個字符串,並在$ digest階段創建一個與用作光標的名稱相同的變量,以滾動用戶範圍中定義的第二個對象。該變量不能保持可訪問性,因爲它只是爲了運行重複而創建的。我正在做這件事,它應該像這樣工作。 –

1

ng-repeat將迭代你的names數組。 它遍歷的每個對象都由您在模板中給出的名稱表示 - 在您的案例中 - x。 你可以給它任何你想要的名字,它將代表所選數組中的一個對象。

2

ng-repeat指令與javascript中的for in循環相同。

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指令定義。