AngularJS: фильтр OrderBy при выборе варианта

Я делаю небольшое приложение, которое сортирует список очков, которые есть у пользователей, подобно таблице лидеров игры. Я настроил ng-repeat для массива объектов, а ng-show для разных опций выбирает, чтобы показать диапазон в списке. Промежутки показывают разные баллы.

Я добавил фильтр orderBy в ng-repeat, чтобы список отфильтровывался от наибольшего к наименьшему. Например, если выбран вариант «Созданные темы», баллы за «Прочитанные сообщения» и «Ответы на сообщения» скрыты, а список отсортирован по количеству созданных потоков (от большего к меньшему).

Это работает для двух значений параметра, но не для третьего. Есть идеи, почему?

              <tr ng-repeat="user in users | orderBy:['-created','-read','-replied']">
            <td> {{user.index}} </td>
            <td> {{user.firstName}} {{user.lastName}}</td>
            <td>
              <span ng-show='discussionsSelect == "created"'>{{ user.created }}</span>
              <span ng-show='discussionsSelect == "read"'>{{ user.read }}</span>
              <span ng-show='discussionsSelect == "replied"'>{{ user.replied }}</span>
            </td>
          </tr>

person JDH    schedule 26.01.2015    source источник
comment
Можете ли вы воспроизвести проблему в plunker или jsfiddle? Кроме того, пожалуйста, опубликуйте код, стоящий за этим?   -  person SoluableNonagon    schedule 26.01.2015
comment
почему вы думаете, что не работает? Можете ли вы опубликовать отрезанный список и упорядоченный список?   -  person Dayan Moreno Leon    schedule 26.01.2015
comment
Надо бы посмотреть данные. Третий элемент в вашем orderBy будет задействован только в том случае, если первые два элемента идентичны. Возможно, у вас нет данных, где это так.   -  person Scott    schedule 26.01.2015
comment
Извините, я забыл опубликовать плункер: plnkr.co/edit/Nay1SeNjWcg30OLz73xI?p=preview   -  person JDH    schedule 26.01.2015


Ответы (1)


Если я правильно понимаю, вы делаете это неправильно. Ваш список будет сортироваться только по «создано». Второе значение предложения orderBy вступит в силу только в том случае, если будут найдены два объекта с одним и тем же «созданным». Аналогично для третьего значения в вашем предложении orderBy. Он будет использоваться только в том случае, если два элемента имеют одинаковое значение «создано», а затем одно и то же значение «прочитано».
Вам нужно будет сделать orderBy переменной, которая устанавливается на основе выбранного раскрывающегося списка. Вы можете установить его на имя переменной, к которой привязан ваш выбор. Я думаю, что обсуждения Выберите в вашем plnkr.

        <tr ng-repeat="user in users | discussionsSelect">
person Scott    schedule 26.01.2015
comment
должно быть <tr ng-repeat="user in users | orderBy: '-'+discussionsSelect"> - person Ulan Murzatayev; 26.01.2015
comment
Спасибо. @UlanMurzatayev - сработал фильтр orderBy. - person JDH; 26.01.2015