使用替代顺序对 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
我正在尝试在 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