2016-06-17 12 views
6

Tôi đang cố gắng sắp xếp một mảng đối tượng bằng cách sử dụng hàm comparator, nhưng có vẻ như hàm comparator bị bỏ qua hoàn toàn (xem angular documentation).Tại sao bộ lọc AngularJS `orderBy` bỏ qua tham số` comparator`?

Tôi đang sử dụng angularJS 1.5.6.

Đây là một 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(); 
}) 

tôi câu hỏi: Tại sao comparator bỏ qua? (Điều này có thể được nhìn thấy kể từ khi cuộc gọi console.log() không bao giờ được thực hiện). Đây có phải là lỗi angularJS không?

Bởi vì điều này tôi thậm chí không thể đặt hàng một mảng các đối tượng bằng cách sử dụng một bộ so sánh tùy chỉnh.

Cảm ơn!

+1

đáng ngạc nhiên các plunker ví dụ họ đưa ra trên trang web cũng không hoạt động như họ đã giải thích trong tài liệu https://plnkr.co/edit/FSq6AwlpdCRmTEQ7hefL?p=preview – Deep

+0

Great catch Deep! Thậm chí không nhận ra điều đó! – Floris

Trả lời

11

Do hỗ trợ cho các trình so sánh tùy chỉnh trong orderBy đã được thêm vào 1.5.7.

Bạn có thể đọc changelog here.

Nếu bạn đánh dấu vào documentation cho 1.5.6 bạn sẽ thấy rằng các api được mô tả như sau:

$filter('orderBy')(array, expression, reverse) 

Trong thời gian ở 1.5.7 nó là:

$filter('orderBy')(collection, expression, reverse, comparator) 
+0

Cảm ơn tasseKATT. Thậm chí không biết phải nói gì. RTCFM. – Floris

+0

Bạn được chào đón! Đừng cảm thấy xấu, nhiều người đã làm những sai lầm tương tự, bao gồm cả bản thân mình :) – tasseKATT

Các vấn đề liên quan