我一直在使用checklist-model处理一系列复选框,每个选中的复选框都可以删除。除非在ng-repeat中使用它,否则一切似乎都可以正常工作。

问题是,当我将track by $indexng-repeat一起添加时,删除的复选框仍然存在。如果我删除该track by,它将正常工作(但是在我的真实应用中,我需要该track by才能正常工作)。

这是一个plnkr,Demo

若要解决此问题,您可以按照以下步骤。


选择您想要的任何复选框
删除那些选定的
选中“全部选中”按钮,


现在查看带有跟踪依据的那个,它会取消选中某些复选框。如果您手动检查它,它将把旧值添加到列表中。真奇怪

任何帮助或解释将不胜感激,谢谢

最佳答案

如果仍然需要跟踪,请将其与对象的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

10-05 20:53
查看更多