Angular of-repeat groupBy和Keep order

问题描述 投票:16回答:3

我使用这个过滤器https://github.com/a8m/angular-filter#groupby来订购我的数据,这样做很好:

<div ng-repeat="(key, value) in tags.tags.objects | groupBy:'category.name' ">

现在我试图通过category.order保持这些组的顺序。

这可能吗?

我试过像这样管道:

<div ng-repeat="(key, value) in tags.tags.objects | groupBy:'category.name' | orderBy:'category.order' ">

但它没有任何区别

javascript html5 angularjs angularjs-directive ionic-framework
3个回答
18
投票

orderBy过滤器不适用于ngRepeat中的对象。那么,你能做的是这样的:

<!-- 
     Note: toArray filter also attaches a new property $key
     to the value containing the original key that was used in the object. 
-->

<div ng-repeat="tags in tagsList | groupBy:'prop' | toArray:true | orderBy:'$key'">
  Group name: {{ tags.$key }}
  <p ng-repeat="tag in tags | orderBy:'prop'">
     {{ tag.name }}
  </p>
</div>

请参阅:toArray过滤器


3
投票

groupBy应该始终是ng-repeat中的最后一个..所以先设置orderBy,然后设置groupBy,然后你可以使用$ index跟踪,这样正常的ng-repeat就可以了。

ng-repeat="item in items orderBy:'price' | groupBy:'name' track by $index"

...希望它有点晚了!


2
投票

部分djsiz的答案(跟踪没有必要,它缺少一个管道),你可以这样做:

<div ng-repeat="(key, value) in tags.tags.objects | orderBy:'category.order' | groupBy:'category.name'">

groupBy创建一个对象,但orderBy需要一个数组......如果你在分组之前命令它,它应该正确排序

https://jsfiddle.net/r0m4n/kfho6r26/

© www.soinside.com 2019 - 2024. All rights reserved.