我已经看到很多答案和文档,表明你可以将一组属性名称传递给Angular的orderBy过滤器,以便按多个字段排序.但是,我的一个对象属性是存储为文本的数字(字段可以是“100”,“75”,“50”或“< 25”).为了将这些值排序为数字,我一直在使用:
<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]
但我认为在该场景中使用函数期望将属性名称作为字符串返回.
谢谢!
最佳答案 问题出在我的sortFunction上.我没有意识到,如果数字是第一个,parseInt将只从混合值中提取数字.
parseInt("25") === 25; //true
parseInt("25+") === 25; //true
parseInt("<25") === 25; //false - actually returns NaN
我将sortFunction更新为
return parseInt(item.itemLevel.replace('<',''));
并且视图中的多级orderBy是我认为应该是现在的:
ng-repeat="item in items | orderBy:['itemStatus',sortFunction]
感谢您的评论!