Я пытаюсь сортировать некоторые элементы в директиве ng-repeat.
Я создал пользовательский фильтр, который появляется, чтобы работать, хотя я получаю ошибку:
"Ошибка: [$ rootScope: infdig].! 10 $ дайджеста() итераций достигнутую Прерывание"
Из того, что я читал на других ответах, это часто связано с возвратом другого значения для каждого фильтра. Я проверил, и я возвращаю тот же объект массива ... поэтому я не уверен, что может вызвать его.
.filter('sortOffers', function() {
return function(vals, predicate, reverse) {
var vals_old = vals;
vals.sort(function(a, b) {
var sorter = reverse ? 1 : -1;
if(predicate === 'seeking') {
if(a.data.valueSought > b.data.valueSought) {
return sorter;
} else if(a.data.valueSought < b.data.valueSought) {
return -sorter;
} else {
return 0;
}
}
if(predicate === 'offering') {
if(a.data.valueOffered > b.data.valueOffered) {
return sorter;
} else if(a.data.valueOffered < b.data.valueOffered) {
return -sorter;
} else {
return 0;
}
}
});
return vals;
}
});
HTML:
<tr ng-repeat="offer in offers | sortOffers:sortOffersPredicate:sortOffersReverse" ng-hide="hideDueDateSellers && offer.data.offerType === 'seeking_flexibility' || hideFlexibilitySellers && offer.data.offerType === 'seeking_duedate'">
<td>{{ offer.data.valueOffered || '0' }} {{ offer.offeringString }}</td>
<td>{{ offer.data.valueSought || '0' }} {{ offer.seekingString }}</td>
<td ng-if="offer.data._owner !== currentUser._id"><button class="ui button positive" ng-click="acceptOffer(offer)">Accept Offer</button></td>
<td ng-if="offer.data._owner === currentUser._id"><button class="ui button negative" ng-click="cancelOffer(offer)">Cancel Your Offer</button></td>
</tr>
Вы смущены о цели фильтра. Фильтр ** не может ** изменять данные каким-либо образом. Любая модификация данных вызывает дайджест, который заставляет фильтр оцениваться, данные, которые необходимо изменить (снова), дайджест, который нужно запустить (снова), без конца. Фильтр должен использоваться только для ограничения возвращаемых результатов, а не для изменения данных. данные должны быть отсортированы в контроллере до применения любого фильтра. – Claies
так меняет порядок массива, что вызывает проблему? – Melbourne2991
Если это так, то почему существует собственный порядок по фильтру? https://docs.angularjs.org/api/ng/filter/orderBy – Melbourne2991