Reputation: 1189
I've been using checklist-model to work with an array of check-boxes with each selected one can be deleted. Everything seems to work fine until I use it inside a ng-repeat.
The problem is, the deleted check-boxes still be there around when I add the track by $index
along with the ng-repeat
. If I remove that track by
, it works fine (but in my real app I need that track by
to work).
Here's a plnkr, Demo
To see the problem, you can follow these steps.
Now look at the one with track by, it will leave some check-box unchecked. If you check it manually, it will have the old value added to the list. This is weird.
Any help or explaination will be really appreciate, thanks
Upvotes: 0
Views: 1671
Reputation: 8138
If you still need to track by, use it with the id of the object. Assuming the id of the object will be always unique.
It is an error to have more than one tracking function to resolve to the same key. (This would mean that two distinct objects are mapped to the same DOM element, which is not possible.)
So instead of this:
<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>
use this:
<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
Upvotes: 1