2013-12-08 31 views
14

下面的代碼無法正常工作,因爲集合包含受騙者:NG重複工作不超過集合包含受騙者

<div ng-repeat="value in [4, 4]"></div> 

我認爲以下應工作,但不幸的是沒有工作:

<div ng-repeat="value in [4, 4] track by $index"></div> 

這是一個錯誤?

有沒有辦法在包含dupe的集合上使用ng-repeat

由於提前,

奧利維爾

回答

17

這個功能已經被添加到AngularJS在新版本中。 重點是基本上你不應該遍歷一些基本類型(例如數字),而是遍歷一些複雜的對象。

從我所瞭解的ngRepeat指令檢查引用不是實際值,因此如果你迭代一些複雜的對象,它會炒作,但如果你試圖通過一組基本類型來做到這一點,它很可能不會作爲只要「所有」的值彼此不同即可。

編輯

以下行是複印和this link粘貼(並確保你使用的是比較先進的最新版本AngularJS的 - 我使用的是1.1.5,它的工作完美 - )

說明

如果有在ngRepeat表達重複鍵時發生。重複鍵被禁止,因爲AngularJS使用鍵來關聯DOM節點和項目。

默認情況下,集合通過引用進行鍵控,這對於大多數常見模型來說是可取的,但對於被引用的基本類型(共享引用)可能會產生問題。

例如,問題可以通過該無效代碼被觸發:

<div ng-repeat="value in [4, 4]"> 
</div> 

要解決此錯誤或者確保集合中的項目有使用的唯一身份軌道的語法指定如何跟蹤模型和DOM之間的關聯。

要解決上面的例子可以通過使用軌道由$指數,來解決這將導致項目被他們的位置排列,而不是其價值中鍵入:

<div ng-repeat="value in [4, 4] track by $index"></div> 
+0

好的,但仍然'追蹤$索引'應該工作在int否? – odwl

+0

'track by $ index'似乎要實現http://stackoverflow.com/questions/21763136/ –

2

有一件事你可以做的是添加「跟蹤$索引」在角度documentation這將改變跟蹤邏輯索引的元素,而不是元素的值,但這將顯示重複值。要顯示唯一的值可以通過編寫一個函數象篩選唯一值:

var uniqueValues = function(data){ 
     var check = {}; 
     var uniqueValue = []; 
     for(i-0;i<data.length;i++){ 
      if(!check[data[i]]){ 
       uniqueValue.push(data[i]); 
       check(data[i]) = true; 
      } 
     } 
     return uniqueValue; 
} 

,然後做了NG-重複這一點。