У меня есть коллекция и им группировка с использованием 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
сначала фильтр orderBy
работает только с массивами, поэтому, если вы попробуете передать ему объект, будет возвращен переданный объект как есть.
во-вторых, с ngRepeat
Вы должны знать, что спецификация JavaScript не определяет порядок ключей, возвращаемых для объекта. (Чтобы уменьшить это в Angular 1.3, директива ngRepeat используется для сортировки клавиш по алфавиту.)
Версия 1.4 удалила сортировку по алфавиту.
Если это нежелательно, рекомендуемым решением является преобразование вашего объекта в массив, который сортируется в том порядке, который вы предпочитаете, прежде чем предоставлять его ngRepeat. Вы можете сделать это с помощью фильтра, такого как toArrayFilter
Поэтому для решения вашей проблемы просто конвертируйте свой групповой объект в массив и отсортируйте его по своему усмотрению.
orderBy
работы