2015-07-24 4 views
0

У меня есть коллекция, и им группировка его с помощью lodash.js GroupBy перед отображением в пользовательском интерфейсе с помощью нг-повторAngularJS: GroupBy затем Сортировка

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

Теперь при отображении его им с помощью нг-повторить это портит заказ

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

UPDATE! Я узнал, что это не проблема в Angular 1.4.x. К сожалению, мы используем старую версию Angular 1.3.x

+0

@elclanrs все еще не повезло. он сортирует его как строку –

+0

@elclanrs: это не то, как угловой 'orderBy' работает – Cerbrus

+0

, когда i' console.debug (vm.myList) 'его в правильном порядке, но в' ng-repeat' он испортил упорядочение, даже если я удаляю 'orderBy' –

ответ

2

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

второй, с ngRepeat

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

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

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

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

Смежные вопросы