我正在尝试使用comparator
函数来排序对象数组,但似乎完全忽略了comparator
函数(请参阅angular documentation)。
我正在使用angularJS 1.5.6。
这是JSFiddle
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.6/angular.min.js">
</script>
<body ng-app="app" ng-controller="ctrl">
{{msg}}
</body>
JavaScript的:
angular.module("app", [])
.factory('f1', function($filter) {
var f1 = {};
function comparator(a,b) { console.log(a,b); return a.id - b.id; }
function getter(x) { /*console.log(x);*/ return x; }
f1.testOrderBy = function() {
return $filter('orderBy')(
[ {id:3}, {id:1}, {id:2} ],
getter,
false,
comparator
)
.map(function(x) { return x.id; })
};
return f1;
})
.controller("ctrl", function($scope, f1) {
$scope.msg = f1.testOrderBy();
})
我的问题:为什么忽略comparator
? (由于永远不会进行console.log()
调用,因此可以看到这一点。这是一个angularJS错误吗?
因此,我甚至无法使用自定义比较器订购对象数组。
谢谢!
答案 0 :(得分:12)
由于orderBy
中对自定义比较符的支持已添加到 1.5.7 中。
您可以阅读更改日志here。
如果您检查documentation 1.5.6 ,您会看到api被描述为:
$filter('orderBy')(array, expression, reverse)
在 1.5.7 时,它是:
$filter('orderBy')(collection, expression, reverse, comparator)