15

im przy użyciu tego filtra https://github.com/a8m/angular-filter#groupby zamówić moich danych tak jak i działa świetnie:kątowa ng-powtórzyć GroupBy i utrzymać porządek

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

Teraz jestem stara się utrzymać porządek, że grupy, przez category.order .

Czy to możliwe?

Próbowałem rurociągów go tak:

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

Ale to nie robi żadnej różnicy

Odpowiedz

17

orderBy filtr nie działa z obiektami w ngRepeat. Więc, co można zrobić, to coś takiego:

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

Patrz: toArray filtr

+0

to orzeźwiający moje listy za każdym razem robię zmienił do obiektu w moim tablicy teraz powodując problemy perforance, myślę, że ma do czynienia z ToArray w jakiś sposób? – TWilly

3

GroupBy powinna być zawsze ostatnim w NG-repeat .. tak ustawić orderby pierwszy i ostatni, a następnie GroupBy możesz użyć ścieżki według $ index , aby normalnie powtórzyć powtórzenie.

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

... Mam nadzieję, że pomoże to nawet jej trochę późno!

1

częściowe odpowiedzi djsiz za (utwór nie jest konieczne, a to brakowało rurę), można to zrobić:

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

GroupBy tworzy obiekt ale orderby potrzebuje tablicę ... jeśli orderby przed sobą grupę, to powinien posortować odpowiednio

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