[英]AngularJs error when usin track by $index with filter in a ng-repeat
[英]When not to use 'track by $index' in an AngularJS ng-repeat?
它有一个disadvantage
,
'track by'
表达式按数组中的索引进行跟踪。 这意味着只要索引保持不变,angularjs 就会认为它是同一个对象。
所以如果你替换数组中的任何对象,angularjs 认为它没有改变,因为数组中的索引仍然相同。 因此,更改检测不会在您期望的时候触发。
看看这个example
尝试更改名称,没有任何反应。 按索引删除轨道,它有效。 按 item.name 添加轨道,它仍然有效。
避免track by $index
原因有很多
track by $index
track by $index
track by $index
问题的其他示例track by $index
该文档特别指出在使用一次性绑定时应避免track by $index
进行track by $index
。
从文档:
当重复模板包含一次性绑定时,避免使用
track by $index
。 在这种情况下,第nth
DOM 元素将始终与数组的nth
项目匹配,因此即使相应项目发生更改,该元素上的绑定也不会更新,从而导致视图与基础数据。
track by $index
当有一个唯一的属性标识符可以使用时,避免track by $index
。 当处理所有唯一的对象时,最好让ng-repeat
使用它自己的跟踪,而不是track by $index
覆盖track by $index
。
从文档:
如果您正在使用具有唯一标识符属性的对象,则应通过此标识符而不是对象实例进行跟踪。 如果您稍后重新加载数据,
ngRepeat
将不必为它已经呈现的项目重建 DOM 元素,即使集合中的 JavaScript 对象已被新对象替换。 对于大型集合,这显着提高了渲染性能。
track by $index
问题的其他示例在对象数组中添加和删除对象时,我也遇到过问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.