使用备用排序对ng-repeat进行排序

时间:2016-02-02 01:25:52

标签: angularjs sorting angular-directive

我正在尝试使用Angular中的ng-repeat对客户列表进行排序,以便列具有评级" Hot"," Warm"和" Cold"按顺序出现。目前,当它对“评级”列进行排序时,它按字母顺序排列" Cold"," Hot"和" Warm"。我将如何按字母顺序排序?是否使用自定义指令创建与评级值相关的自定义属性,然后使用"跟踪"?

这是一个CodePen,其中包含按字母顺序排序的工作示例:

http://codepen.io/MattSchultz/pen/VeBpaQ

<li id="listCont" ng-repeat="client in clients | orderBy:col:reverse as results" ng-class-even="'even'">
    <ul class="clients">
      <li>{{client.Name}}</li>
      <li>{{client.AnnualRevenue | currency}}</li>
      <li ng-class="classy('{{client.Rating}}')">{{client.Rating}}</li>
    </ul>
</li>

1 个答案:

答案 0 :(得分:3)

如果您将一个字符串(即对象属性名称)作为第一个参数传递给orderBy filter,就像您在示例中所做的那样,它将尝试按字母顺序排序。要更改此行为,您需要传递自定义排序功能。

例如:

function ratingSort(val) {
  return ['Cold', 'Warm', 'Hot'].indexOf(val.Rating);
};

此函数返回介于-1(即val.Rating值不在数组中)和2(即&#39; Hot&#39;,其在数组中的索引2处)之间的数字。返回的数字用于确定排序顺序。

以下是一个工作示例:CodePen