避免Angular.js orderBy默认排序

Avoid Angular.js orderBy default sorting

我是 Angular 的新手,我仍在努力思考可能发生的事情,所以这可能是一个有明显答案的问题,但我在网上找不到任何相关答案.

我有一个 switch statement 决定从 return 到 orderBy 的哪个值,并且 orderBy 根据值 [=47= 正确地排列对象列表]编辑。但是,我希望 switch statementdefault 案例确保 orderBy 对对象列表的顺序没有任何影响。

但是,orderBy 似乎具有默认功能,如果您不给它任何值,它会按照自己的方式对列表进行排序。

我尝试了各种方法让它工作:

default: return; return什么都没有,orderBy 使用它的默认顺序。

default:break; return什么都没有,orderBy 使用其默认顺序

default: return [];return [''] 我认为一个空数组会被识别为一个参数,并且会解决这个问题,但它仍然使用默认顺序。

default: return [':false']; 我认为在 (reverse:false) 中传递一些值会覆盖默认顺序,但我收到了一个错误。

我也将它设置为使用 orderBy: $index track by $index - 我认为它只会按数组的原始索引对其进行排序。这没有用。

Does anyone know an argument I can pass into orderBy to get it to do nothing at all to a list, or how I can override the default sorting.

您必须将 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>

orderBy docs

the example plunker

暂时不触发orderBy是唯一的办法

例如

ng-repeat="x in (wantToOrder ? (array | orderBy) : array)"