我一直在使用checklist-model来处理一系列复选框,每个复选框都可以删除。一切似乎都能正常工作,直到我在ng-repeat中使用它。
问题是,当我添加track by $index
和ng-repeat
时,删除的复选框仍然存在。如果我删除了track by
,它可以正常工作(但在我的真实应用中,我需要track by
才能工作)。
这是一个plnkr,Demo
要查看问题,您可以按照以下步骤操作。
现在看看带有track by的那个,它将取消选中一些复选框。如果您手动检查它,它将旧的值添加到列表中。这很奇怪。
非常感谢任何帮助或解释,谢谢
答案 0 :(得分: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>