简单理解就是使用ng-repeat循环遍历的数组会给每一个元素添加$$hashkey,用于绑定DOM元素,如果数组被替换,这个值改变的话DOM元素就会重新渲染。
如果数组中的值是数字、字符串等基本数据类型的话,每个值的id(理解为$$hashkey)就是他本身的值,angual不允许出现箱通的值,因此r就会报错。
避免报错的方法,定义自己track by表达式, 即track by item.id or $index,一个是业务自己的id,一个是自增。
因此如果使用 index,因为是自增,如果对数组进行某些操作,例如删除,每一个元素自身和 i n d e x , 因 为 是 自 增 , 如 果 对 数 组 进 行 某 些 操 作 , 例 如 删 除 , 每 一 个 元 素 自 身 和 index并不是紧密绑定的,这回导致某些跟$index相绑定的逻辑变得不适用,因此使用item.id,每个元素紧密绑定一个自身的值,且值不同,
{id: new Date().getTime()}
参考:angular ng-repeat中DOM的重新渲染机制(项目中遇到问题)
ng-repeat循环数组,数组内容相同时报错及解决