AngularJS: группа, затем сортировка

0

У меня есть коллекция и им группировка с использованием lodash.js groupBy перед отображением в пользовательском интерфейсе с использованием ng-repeat

    var list = [{id:1,categoryId:1,name:test1},
                {id:2,categoryId:2,name:test2},
                {id:3,categoryId:12,name:test12}]

    vm.myList= _.groupBy(list,function (j) { return j.categoryId; });

    console.debug(vm.myList) // this shows the correct ordering!!!

Теперь, когда я показываю его с помощью ng-repeat, он помешает упорядочению

<div ng-repeat="(categoryId, details) in vm.myList| orderBy: 'categoryId'>
        {{ categoryId }}
</div>

это отображает

1
12
2

как я могу его отобразить

1
2
12

Я пытаюсь что-то вроде этого, но не повезло

<div ng-repeat="(categoryId, details) in vm.myList| orderBy: 'parseInt(categoryId)'>
            {{ categoryId }}
    </div>

ОБНОВИТЬ! Я узнал, что это не проблема в Angular 1.4.x. К сожалению, мы используем старую версию Angular 1.3.x

  • 0
    @elclanrs все еще не повезло. это сортировать как строку
  • 0
    @elclanrs: это не так, как угловая - х orderBy работы
Показать ещё 11 комментариев
Теги:
lodash
underscore.js

1 ответ

2
Лучший ответ

сначала фильтр orderBy работает только с массивами, поэтому, если вы попробуете передать ему объект, будет возвращен переданный объект как есть.

во-вторых, с ngRepeat

Вы должны знать, что спецификация JavaScript не определяет порядок ключей, возвращаемых для объекта. (Чтобы уменьшить это в Angular 1.3, директива ngRepeat используется для сортировки клавиш по алфавиту.)

Версия 1.4 удалила сортировку по алфавиту.

Если это нежелательно, рекомендуемым решением является преобразование вашего объекта в массив, который сортируется в том порядке, который вы предпочитаете, прежде чем предоставлять его ngRepeat. Вы можете сделать это с помощью фильтра, такого как toArrayFilter

Поэтому для решения вашей проблемы просто конвертируйте свой групповой объект в массив и отсортируйте его по своему усмотрению.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню