2015-01-09 82 views
0
<table> 
    //thead[...] 
    <tr ng-repeat="user in users track by user.username"> 
     <td>{{user.username}}</td> 
     ... 
    </tr> 
</table> 

每當我添加元素($scope.users.push(newUser);),其關鍵在NG-重複名單被複制,我得到的錯誤:複製時,如何更新NG重複列表元素鍵對象被添加

Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: user in users, Duplicate key: username

我對此很好,但我希望舊對象更新爲新的值。換句話說,我希望它更新或替換。

我在谷歌找不到任何幫助,所以我迷路了。

+2

您可以嘗試.splice而不是push來添加/刪除(基本上替換)數組中的項目。 – DeborahK 2015-01-09 22:36:36

+0

我懷疑你必須通過用戶瀏覽並找到重複密鑰並手動更新對象,但是我不太瞭解這個問題,我自己可以確定這是一個解決方案 – onaclov2000 2015-01-09 22:37:26

+0

@DeborahK這非常好用!你應該回復,以便我可以接受它。 :)! – Umagon 2015-01-09 22:42:16

回答

0

使用.splice而不是.push添加/刪除(基本上替換)數組中的項目。

+0

恐怕我被我的設置欺騙了。這個答案本身並不完整,因爲它缺少找到所需索引的部分。我現在不得不取消選中它。對不起。 :( – Umagon 2015-01-10 05:12:00

0

惱人的,因爲它可能是這樣的(更多的是僞的,因爲我真的不知道大部分代碼):

for (var i =0; i <=length_of_array; i++){ 
    if (array[i].admin == new_element.admin) 
    { 
     array[i] = new_element; 
     new_element =null; 
    } 
} 
if (new_element != null) 
{ 
    array.push(new_element) 
} 

就像我沒有任何更多的背景下,這基本上就是我會建議說,我不是角度上的專家,但除非有我不知道的特定角度解決方案,否則這是另一種選擇。

+0

我期待通過angularJS API找到一種方法,但我想這是我必須要做的,畢竟,當你檢查它是否是'!='而不是'=='時在循環中更新? – Umagon 2015-01-12 04:10:44

+0

是的第二個應該檢查我們沒有做過交換,你可以交替使用一個控制變量,我只是想你是否已經替換了數組中的值,將新元素設置爲null不應該是一個大不了 – onaclov2000 2015-01-13 08:08:50