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