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

OrderBy два поля (один в обратном порядке)

Я хотел бы заказать список друзей по статусу (онлайн-первыми, в автономном режиме) и в алфавитном порядке. Все, что мне удалось получить, это:

  • Онлайн-персон/Обратный алфавитный порядок
  • Или в автономном режиме/в алфавитном порядке

Вот plunker, чтобы выявить мою проблему

4b9b3361

Ответ 1

Измените фильтр orderBy на это:

orderBy:['-status','name']

Это будет упорядочиваться по убыванию статуса (путем префикса символа -), затем восходящего имени. В настоящее время вы передаете true, чтобы отменить сортировку, которая приводит к правильному состоянию (сначала в Интернете), но имена, подлежащие обратному (то есть, по убыванию).

Если вы хотите сохранить обратное логическое значение, вы можете использовать orderBy:['status','-name']:true, но это кажется менее ясным, чем просто сокращение status, как показано ранее.

Ответ 2

Есть и другая возможность сделать это, вы можете иметь несколько фильтров orderBy в ng-repeat и эту строку:

<li class="friend" ng-repeat="friend in friends | orderBy:['status','name']:true">

будет:

<li class="friend" ng-repeat="friend in friends | orderBy:'name':false | orderBy:'status':true">

Последний orderBy выполняется первым, а второй - последним и т.д.

Вот мой plunkr: http://plnkr.co/edit/girPFzdi3Zx0yp0ASGVQ?p=preview

Ответ 3

В Angular 1.5.8 предыдущий пример не работает. Необходимо применять различную логику.

Он выглядит логически с предыдущего порядкаBy применяется к следующему, поэтому для сортировки имени ASC и статуса DESC должен быть почитаем порядок имен:

<li class="friend" ng-repeat="friend in friends | orderBy:'name':true | orderBy:'status':true">

Вот пример: http://plnkr.co/edit/0ZFIftSgNkU9F03xJztG?p=preview