web-dev-qa-db-fra.com

Angular ng-repeat groupBy et Keep order

J'utilise ce filtre https://github.com/a8m/angular-filter#groupby pour commander mes données comme ça, et cela fonctionne très bien:

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

Maintenant j'essaye de garder l'ordre de ces groupes, par category.order.

Est-ce possible?

J'ai essayé de le passer comme ça:

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

Mais cela ne fait aucune différence

16
Harry

orderBy le filtre ne fonctionne pas avec les objets dans ngRepeat. Donc, ce que vous pouvez faire est quelque chose comme ceci:

<!-- 
     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>

Voir: toArray filtre

18
a8m

groupBy doit toujours être le dernier de la répétition ng. Réglez donc orderBy en premier et groupBy en dernier, puis vous pouvez utiliser track by $ index pour que la répétition ng normale soit.

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

... J'espère que ça aide même son peu tard!

3
Sijan Gurung

Pour partiellement la réponse de djsiz (le suivi par n'est pas nécessaire et il manquait un tuyau), vous pouvez le faire:

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

Le groupBy crée un objet mais le orderBy a besoin d'un tableau ... si vous orderBy avant de grouper, il devrait trier correctement

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

2
r0m4n