Избегайте сортировки 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>

заказать документы

пример плунжера

Другие вопросы по тегам