我正在实施一个带有ng-repeat的自动完成系统。基本上,我有一系列对象提供ng-repeat。我注意到当我向数组中插入新内容时,不会保留插入顺序。例如
广告订单
A - B - C
ng-repeat渲染顺序
A - C - B
(A,B,C中的每一个都是具有2个键'id'和'name'的对象)
仔细观察一下,我发现这种行为是由如何生成$$ hashKey引起的。 'C'以某种方式获得了一个小于'B'的哈希键,所以它在'B'之前,即使它与插入顺序相反。
有人可以帮忙吗?
答案 0 :(得分:1)
您应该使用track by
语法(需要angular.js > = 1.2 )
<div ng-repeat="item in items track by item.id">
阅读这篇文章:http://www.bennadel.com/blog/2556-Using-Track-By-With-ngRepeat-In-AngularJS-1-2.htm
表达式跟踪中的变量由tracking_expression`
组成您还可以提供可选的跟踪功能,该功能可用于将集合中的对象与DOM元素相关联。如果未指定跟踪功能,则ng-repeat按集合中的标识关联元素。使用多个跟踪功能解析为同一个密钥是错误的。 (这意味着两个不同的对象被映射到同一个DOM元素,这是不可能的。)在指定跟踪表达式之前,应将过滤器应用于表达式。