Избегайте сортировки Angular.js по умолчанию
Я новичок в Angular и все еще пытаюсь разобраться, что возможно, так что это может быть вопрос с очевидным ответом, но я не могу найти какие-либо соответствующие ответы в Интернете.
у меня есть switch statement
который решает, какое значение вернуть orderBy
, а также orderBy
правильно ранжирует список объектов в соответствии с возвращаемым значением. Тем не менее, я хочу default
дело моего switch statement
чтобы убедиться, что orderBy
ничего не делает с порядком списка объектов.
Тем не менее, кажется, что orderBy
имеет функциональность по умолчанию, которая упорядочивает список по-своему, если вы не дадите ему значения.
Я пробовал разные способы заставить его работать:
default: return;
ничего не возвращает и orderBy
использует порядок по умолчанию.
default:break;
ничего не возвращает и orderBy
использует порядок по умолчанию
default: return [];
а также return ['']
Я думал, что пустой массив будет распознан как аргумент, и обойдется, но он по-прежнему использует порядок по умолчанию.
default: return [':false'];
Я думал, что передача некоторого значения в (reverse: false) переопределит порядок по умолчанию, но я получаю ошибку для этого.
Я также настроил его на использование orderBy: $index track by $index
- Я думал, что это будет просто упорядочить его по исходному индексу массива. Это не сработало.
Кто-нибудь знает аргумент, который я могу передать
orderBy
заставить его ничего не делать со списком, или как я могу переопределить сортировку по умолчанию.
2 ответа
Не вызывая orderBy это единственный способ на данный момент.
Например
ng-repeat="x in (wantToOrder ? (array | orderBy) : array)"
Вам придется установить orderBy
стоимость имущества до null
,
propertyName = null
в JS
или же
ng-repeat="friend in friends | orderBy:null"
в HTML
Документы не упоминают об этом напрямую, но есть пример, который отключает сортировку, заменяя строку свойства равным нулю.
<button ng-click="propertyName = null; reverse = false">Set to unsorted</button>
<hr/>
<table class="friends">
<tr>
<th>
<button ng-click="sortBy('name')">Name</button>
<span class="sortorder" ng-show="propertyName === 'name'" ng-class="{reverse: reverse}"></span>
</th>
<th>
<button ng-click="sortBy('phone')">Phone Number</button>
<span class="sortorder" ng-show="propertyName === 'phone'" ng-class="{reverse: reverse}"></span>
</th>
<th>
<button ng-click="sortBy('age')">Age</button>
<span class="sortorder" ng-show="propertyName === 'age'" ng-class="{reverse: reverse}"></span>
</th>
</tr>
<tr ng-repeat="friend in friends | orderBy:propertyName:reverse">
<td>{{friend.name}}</td>
<td>{{friend.phone}}</td>
<td>{{friend.age}}</td>
</tr>
</table>