0

我有一个这样的 ng-repeat 设置:

ng-repeat="article in main[main.mode].primary | orderBy: main[main.mode].primary.filter.order
track by article.url"

main[main.mode].primary是一个数组,而 ...<code>.filter.order 是一个字符串。

根据这篇博文

在幕后 ngRepeat 为每个任务添加了一个 $$hashKey 属性来跟踪它。如果您用来自服务器的新任务对象替换原始任务,即使它们实际上与您的原始任务完全相同,它们也不会具有 $$hashKey 属性,因此 ngRepeat 不会知道它们代表相同的元素。

重新生成列表是一项非常常见的任务,该应用程序会挂起超过一秒钟,因此我对跟踪感兴趣。根据我看过的许多问题和文档,我使用正确的语法来排序和跟踪数组。从文档

项目中的项目 | filter:searchText track by item.id 是一种模式,可用于结合跟踪表达式将过滤器应用于项目。

为什么不通过实施跟踪?我正在运行角度 1.3.11。

编辑 如果我删除 orderBy 参数,它甚至都不起作用

ng-repeat="article in main[main.mode].primary track by article.url"
4

1 回答 1

1

根据 Angular 文档 orderBy 仅适用于数组,因此如果您正在迭代一个对象,除非您将对象转换为数组,否则您将无法使用它

https://docs.angularjs.org/api/ng/filter/orderBy

还有其他方法可以处理这个问题,要么实现你自己的过滤器,要么只是将你的对象转换为具有键值属性的对象数组。就像是

var narr=[]
angular.forEach(object,function(k,v){
  narr.push({key:v,value:v})
})

现在 narr 是一个数组,可以使用 orderBy 按键或值进行排序

于 2015-01-29T23:48:08.660 回答