Ответ 1
orderBy
может принимать массив из нескольких параметров для упорядочивания. Итак, вы можете сделать:
c as c.label group by c.group for c in data | orderBy:['group','label']
Предположим, что у меня есть следующий массив данных в этой форме:
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, но это не работает так, как мне нужно. Я предполагаю, что я должен написать специальный фильтр, который вручную упорядочивает список так, как я хочу, но мне было интересно, есть ли более простой способ выполнить задачу.
orderBy
может принимать массив из нескольких параметров для упорядочивания. Итак, вы можете сделать:
c as c.label group by c.group for c in data | orderBy:['group','label']
Кажется, что orderBy
будет работать точно так, как вы хотите.
Просто возьмите свое выражение и добавьте orderBy в конец:
c as c.label group by c.group for c in data | orderBy:'label'
Сначала будет отсортирован массив data
на значение каждого элемента label
, а затем сгруппируйте его. Поскольку данные будут правильно упорядочены, каждая группа будет отображаться правильно.
Обратите внимание, как начальный массив определен в обратном порядке, но правильно отсортирован в каждой группе в элементе выбора.