为什么AngularJS`orderBy`过滤器忽略`comparator`参数?

Flo*_*ris 7 javascript angularjs

我试图通过使用comparator函数来排序对象数组,但似乎comparator完全忽略了该函数(请参阅角度文档).

我正在使用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>
Run Code Online (Sandbox Code Playgroud)

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();
})
Run Code Online (Sandbox Code Playgroud)

我的问题:为什么被comparator忽视?(这可以看出,因为console.log()永远不会打电话).这是一个angularJS错误吗?

因此,我甚至无法使用自定义比较器来排序对象数组.

谢谢!

tas*_*ATT 12

因为orderBy1.5.7中添加了对自定义比较器的支持.

您可以在此处阅读更改日志.

如果您查看1.5.6文档,您将看到api被描述为:

$filter('orderBy')(array, expression, reverse)
Run Code Online (Sandbox Code Playgroud)

1.5.7中它是:

$filter('orderBy')(collection, expression, reverse, comparator)
Run Code Online (Sandbox Code Playgroud)

  • 谢谢 tasseKATT。也不知道该说什么。RTCFM。 (2认同)