避免Angular.js orderBy默认排序

时间:2016-07-20 14:28:16

标签: angularjs angularjs-orderby

我是Angular的新手,我仍然试图了解可能的情况,所以这可能是一个明显答案的问题,但我在网上找不到相关的答案。

我有switch statement决定返回orderBy的值,orderBy根据返回的值正确排列对象列表。但是,我希望我default的{​​{1}}案例确保switch statement对对象列表的顺序不执行任何操作。

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

我尝试了各种方法让它发挥作用:

orderBy不返回任何内容,default: return;使用其默认排序。

orderBy不返回任何内容,default:break;使用其默认排序

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

return ['']我认为传递一些值(reverse:false)会覆盖默认排序,但是我得到了一个错误。

我还将它设置为使用default: return [':false']; - 我认为它只是按照数组的原始索引排序。这没用。

  

有没有人知道我可以传递给orderBy: $index track by $index的论据来让它去做   什么都没有到列表,或我如何覆盖默认排序。

2 个答案:

答案 0 :(得分:1)

您必须将orderBy属性值设置为null

JS中的

propertyName = null

HTML中的

ng-repeat="friend in friends | orderBy:null"

文档没有直接提到这一点,但有一个例子通过将属性字符串替换为普通的null来禁用排序。

<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

答案 1 :(得分:1)

通过不触发orderBy是暂时的唯一方法。

E.g。

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