Сортировка массива объектов в 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: urgent
Angular должен быть в состоянии понять все остальное.
Вы должны использовать следующий синтаксис:
orderBy: 'urgent'
Вот цитата из документации по использованию string
в качестве параметра orderBy:
строка: угловое выражение. Результат этого выражения используется для сравнения элементов (например,
name
сортировать по свойствуname
)...
2 вещи вызвали эту ошибку:
Сначала нужно отсортировать массив, а затем ограничить просмотр.
Какой бы атрибут объекта вы не хотели отсортировать, вы должны указывать только имя атрибута, а не сам объект.
вместо:
ng-repeat="item in dashboardCtrl.unAckAlertList | limitTo : 4 | orderBy: 'item.urgent'"
так должно быть
ng-repeat="item in dashboardCtrl.unAckAlertList | orderBy: 'urgent' | limitTo : 4 "