【发布时间】:2017-10-06 14:22:14
【问题描述】:
我看到很多答案和文档表明您可以将一组属性名称传递给 Angular 的 orderBy 过滤器以按多个字段排序。但是,我的对象属性之一是存储为文本的数字(字段可以是“100”、“75”、“50”或“
<div ng-repeat="item in items | orderBy:sortFunction">
{{item.itemStatus}} - {{item.itemLevel}}
</div>
//Function in controller...
$scope.sortFunction = function(item) {
return parseInt(item.itemLevel);
}
我现在要做的是首先按 item.itemStatus 排序,然后按 item.itemLevel 作为数字排序。有没有办法在不首先更改我的数据模型的情况下做到这一点?我可以遍历所有项目并添加一个新属性,即 itemLevel 作为数字,然后使用过滤
ng-repeat="item in items | orderBy:['itemStatus','itemLevelAsNumber']
但我想知道是否有更好的方法。我试过了
ng-repeat="item in items | orderBy:['itemStatus',sortFunction]
但我认为在这种情况下使用函数需要将属性名称作为字符串返回。
谢谢!
【问题讨论】:
-
我没有进行二次排序的答案,但我确实想指出自定义比较器函数需要两个参数,因为该函数需要在集合的两个元素之间进行比较。然后,如果两个项目相等,则必须返回 0,如果第一个值小于第二个值,则返回 -1,如果第一个值大于第二个值,则返回 1。 docs.angularjs.org/api/ng/filter/orderBy
-
但我认为在该场景中使用函数需要将属性名称作为字符串返回。不,它的工作方式与您的第一个示例相同。@987654323 @ 所以
item in items | orderBy:['itemStatus',sortFunction]应该没问题。证明了fiddle -
@George - 你是对的。我的问题是 parseInt("
标签: javascript angularjs sorting