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/