2014-10-20 56 views
0

我一直在使用checklist-model來處理一系列複選框,每個選中的複選框都可以刪除。一切似乎都很好,直到我在ng-repeat中使用它。ng-repeat不更新跟蹤模型

問題是,當我添加track by $index以及ng-repeat時,刪除的複選框仍然存在。如果我刪除track by,它工作正常(但在我的真實應用程序,我需要track by工作)。

這裏有一個plnkr,Demo

要看到這個問題,你可以按照以下步驟。

  1. 選擇任何複選框你想
  2. 刪除這些選定的
  3. 檢查檢查所有按鈕查看,

看看現在由一個與軌道,它會留下一些複選框未選中。如果您手動檢查它,它會將舊值添加到列表中。這很奇怪。

任何幫助或交代會很感激,感謝

+2

爲什麼不用'id'跟蹤 – harishr 2014-10-20 19:17:18

+0

澄清@哈里什的評論,如果它不明顯,使用'ng-repeat:verb動詞跟蹤動詞.id' – 2014-10-20 19:41:53

回答

1

如果您仍然需要跟蹤的,與​​對象的id使用它。假設對象的id始終是唯一的。

將多個跟蹤功能解析爲同一個密鑰是錯誤的。 (這將意味着,兩個不同的對象被映射到相同的DOM元素,這是不可能的。)

因此,而不是這樣的:

<tr ng-repeat="verb in verbs track by $index"> 
    <td> 
     <input type="checkbox" checklist-model="list.verbs" checklist-value="verb.id"> 
    </td> 
    <td> 
     {{verb.id}} 
    </td> 
    <td> 
     <span>{{verb.text}}</span> 
    </td> 
    </tr> 

使用這樣的:

<tr ng-repeat="verb in verbs track by verb.id"> 
    <td> 
     <input type="checkbox" checklist-model="list.verbs" checklist-value="verb.id"> 
    </td> 
    <td> 
     {{verb.id}} 
    </td> 
    <td> 
     <span>{{verb.text}}</span> 
    </td> 
    </tr> 

http://plnkr.co/edit/UTtQQJIbtRPdGh0YhRMH?p=preview

+0

謝謝,不知道我們可以使用track .property可以工作,大多數例子我看到他們只使用$ index,所以我只是認爲這是唯一的方法,並假設每次模型更改時它都會生成一個唯一的ID 。 – 2014-10-21 06:32:14