2013-06-12 5 views
28

Давайте предположим, что у меня есть следующий массив данных в этой форме:AngularJs - ngOptions: Как заказать по названию группы, а затем Ярлык

var data = [{group:GroupA, label: BB}, {group:GroupB, label: DD}.....]. 

Мой связывании будет что-то вроде:

<select data-ng-options="c as c.label group by c.group for c in data"></select> 

Я бы хотел, чтобы выпадающий список отображал все элементы с GroupA перед GroupB, а также сортировал их под каждой группой.

Нечто подобное.

GroupA 
AA 
BB 
CC 

GroupB 
DD 
EE 
FF 

Я знаю, что могу использовать orderBy Angular filter, но это не работает так, как мне нужно. Я предполагаю, что я должен написать специальный фильтр, который вручную упорядочивает список так, как я хочу, но мне было интересно, есть ли более простой способ выполнить задачу.

ответ

46

orderBy может принимать множество различных параметров для заказа. Так что вы можете сделать:

c as c.label group by c.group for c in data | orderBy:['group','label'] 

Here is a fiddle

+0

Спасибо. Я не знал, что вы можете передать массив в orderBy. Полагаю, я не упускаю эту часть в документации angularjs. Но, по крайней мере, я знал, что есть более простой способ, поскольку это будет довольно распространенный случай использования. –

+1

Вы можете указать порядок сортировки, используя этот метод? т. е. я хочу сортировать по группе asc, а затем называть desc? –

+7

@RossJones Да, вы бы изменили '['group', 'label']' на '['+ group', '- label']' – sh0ber

1

Кажется, что orderBy будет работать точно так же, как вы хотите.

Просто возьмите ваше выражение и добавьте OrderBy в конце:

c as c.label group by c.group for c in data | orderBy:'label' 

Это первый заказ на data массив по значению label имущества каждого элемента, а затем сгруппировать их. Поскольку данные будут правильно упорядочены, каждая группа будет отображаться правильно.

Here's a fiddle.

Обратите внимание, как исходная матрица задана в обратном порядке, но правильно сортируются в каждой группе в избранных.

+0

, что на самом деле не гарантирует группу А перед тем группы В. Если у вас есть группа A содержит только «GG, HH, II», то порядок будет отменен. Наверное, я дал плохой пример. :П. Мне действительно удалось заставить это работать, сначала отсортировав группу, и если две группы одинаковы, то сортируйте их по значению метки. –

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