Сортировка массива объектов в ng-repeat с помощью orderBy

У меня есть массив объектов, и я пытаюсь отсортировать (или сгруппировать) их по логическому атрибуту объекта с использованием функции angularjs ng-repeat.

Я пытался использовать orderBy и groupBy, но ни один из них не работал.

вот мой HTML:

<tbody md-body>
                        <tr md-row ng-repeat="item in dashboardCtrl.unAckAlertList | limitTo : 4 | orderBy: 'item.urgent'">
                            <td md-cell>
                                <i ng-if="item.urgent" class="fa fa-warning" style="font-size:22px;color:red;"></i><i ng-if="!item.urgent" class="fa fa-warning" style="font-size:22px;color:slategray;"></i><span><b> {{item.status}}</b></span>
                            </td>
                            <td md-cell>
                                {{item.MyName}} / {{item.sourceProperty}}
                            </td>
                            <td md-cell>
                                {{item.name}}
                            </td>

Это никогда не работало, и я удивляюсь, почему.

3 ответа

orderBy ищет свойства, которые вы ему сообщаете, внутри текущего элемента из вашего массива.

В предоставленном вами фрагменте вы дали текущему элементу имя item, который является то, что orderBy будет искать свойства в.

Вам не нужно писать orderBy: item.urgent, Если ты пишешь orderBy: urgentAngular должен быть в состоянии понять все остальное.

Вы должны использовать следующий синтаксис:

orderBy: 'urgent'

Вот цитата из документации по использованию string в качестве параметра orderBy:

строка: угловое выражение. Результат этого выражения используется для сравнения элементов (например, name сортировать по свойству name)...

2 вещи вызвали эту ошибку:

  1. Сначала нужно отсортировать массив, а затем ограничить просмотр.

  2. Какой бы атрибут объекта вы не хотели отсортировать, вы должны указывать только имя атрибута, а не сам объект.

вместо:

ng-repeat="item in dashboardCtrl.unAckAlertList | limitTo : 4 | orderBy: 'item.urgent'"

так должно быть

ng-repeat="item in dashboardCtrl.unAckAlertList | orderBy: 'urgent' | limitTo : 4 "
Другие вопросы по тегам