Angular ng-repeat groupBy и порядок сохранения

Im, используя этот фильтр https://github.com/a8m/angular-filter#groupby, чтобы упорядочить мои данные так, и он отлично работает:

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

Теперь я пытаюсь сохранить порядок этих групп по категориям.

Возможно ли это?

Я попробовал сделать это так:

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

Но это не имеет никакого значения.

Ответы

Ответ 1

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 фильтр

Ответ 2

groupBy всегда должен быть последним в ng-повторе. поэтому установите orderBy first и groupBy последним, а затем вы можете использовать track by $index поэтому нормальный ng-repeat будет.

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

... Надеюсь, что это поможет даже немного опоздать!

Ответ 3

Частично ответа djsiz (трек не нужен, и в нем отсутствует канал), вы можете сделать это:

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

ГруппаBy создает объект, но orderBy нуждается в массиве... если вы заказываетеBy перед группой, он должен правильно сортироваться

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