使用替代顺序对 ng-repeat 进行排序

Sorting ng-repeat with alternate ordering

我正在尝试在 Angular 中使用 ng-repeat 对客户列表进行排序,以便其中显示评级为 "Hot"、"Warm" 和 "Cold" 的列命令。目前,当它对 Rating 列进行排序时,它会将它们按 "Cold"、"Hot" 和 "Warm" 的字母顺序排列。我将如何按非字母顺序对其进行排序?使用自定义指令创建与评级值相关的自定义属性然后使用 "track by"?

是否有问题

这是一个 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>

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

例如:

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

这个函数 returns 一个介于 -1(即 val.Rating 值不在数组中)和 2(即 'Hot',它在数组中的索引 2 处)之间的数字.返回的数字用于确定排序顺序。

这是一个工作示例:CodePen