Подтвердить что ты не робот

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, но это не работает так, как мне нужно. Я предполагаю, что я должен написать специальный фильтр, который вручную упорядочивает список так, как я хочу, но мне было интересно, есть ли более простой способ выполнить задачу.

4b9b3361

Ответ 1

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

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

Вот скрипка

Ответ 2

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

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

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

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

Здесь скрипка.

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