15

Im mit diesem Filter https://github.com/a8m/angular-filter#groupby meiner Daten wie so bestellen, und es funktioniert super:Angular ng-repeat groupBy und halten, um

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

Im jetzt versuchen, die Reihenfolge der, dass Gruppen zu halten, durch category.order .

Ist das möglich?

habe ich versucht, es wie so kochend:

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

Aber es macht keinen Unterschied

Antwort

17

orderBy Filter mit Objekten nicht ngRepeat in Arbeit. Also, was Sie tun können, ist so etwas wie dieses:

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

See: toArray Filter

+0

das ist erfrischend meine Listen jedes Mal, wenn ich eine Bearbeitung auf ein Objekt in meinem Array machen jetzt perforance Probleme verursachen, ich denke, es mit dem ToArray zu tun hat , irgendwie herum? – TWilly

3

groupBy sollte immer die letzte in der ng-repeat .. so eingestellt orderBy erste und groupBy letzte und dann Sie können verfolgen von $ index so die normale ng-Wiederholung wird.

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

... Hoffe, dass es spät noch seinen kleinen hilft!

1

Um teilweise von Antwort des djsiz (Spur durch nicht notwendig ist, und es wurde ein Rohr fehlt), können Sie dies tun:

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

Die groupBy erzeugt ein Objekt, aber die orderBy benötigt ein Array ... wenn Sie, bevor Sie Gruppe orderby, sollte es richtig sortieren

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