2013-07-31 39 views
6

Tôi đang áp dụng bộ lọc lớn hơn cho thẻ ng-repeat. Tôi đã viết những chức năng lọc tùy chỉnh sau:Angularjs: lớn hơn bộ lọc có ng-repeat

$scope.priceRangeFilter = function (location) { 
    return location.price >= $scope.minPrice; 
}; 

và tôi sử dụng nó trong các mã HTML sau:

<div ng-repeat="m in map.markers | filter:priceRangeFilter"> 

cách tốt nhất để kích hoạt làm mới của thẻ ng-repeat là gì khi $ phạm vi .minPrice được cập nhật?

+0

Nó làm mới tự động như đã nêu bởi SZA, tôi đã phạm sai lầm trong minPrice ràng buộc trong biểu mẫu. Lời xin lỗi của tôi. – Julien

Trả lời

10

Nó sẽ được tự động. Khi $scope.minPrice bị thay đổi, bộ lặp sẽ tự động được cập nhật.

function Ctrl($scope, $timeout) { 
    $scope.map = [{ 
     name: 'map1', 
     price: 1 
    }, { 
     name: 'map2', 
     price: 2 
    }, { 
     name: 'map3', 
     price: 3 
    }]; 
    $scope.minPrice = 0; 
    $scope.priceRangeFilter = function (location) { 
     return location.price >= $scope.minPrice; 
    }; 

    $timeout(function() { 
     $scope.minPrice = 1.5; 
    }, 2000); 
} 

Demo on jsFiddle

7

Tạo bộ lọc dưới dạng dịch vụ bộ lọc bằng cách sử dụng bộ lọc angularjs api và thêm minPrice làm thông số.

filter('priceRangeFilter', function (location) { 
    return function (location, minPrice) { 
     ... 
    } 
}) 

và trong mẫu

<div ng-repeat="m in map.markers | priceRangeFilter:minPrice"> 

Xem ví dụ trong fiddle này: http://jsfiddle.net/Zmetser/BNNSp/1/

+0

Tôi sẽ chỉ tạo bộ lọc đã đăng ký nếu nó thực sự có thể sử dụng lại hoặc tôi đang lọc cùng một loại thực thể trong nhiều phạm vi không thể chia sẻ chức năng lọc –

+0

Bạn có thể chuyển kim vào thuộc tính đối tượng mà bạn đang so sánh và bạn có bộ lọc GT có thể tái sử dụng cho Mảng đối tượng. Bằng cách này, bộ điều khiển của bạn sẽ nhẹ hơn. Nhưng bạn cũng đúng. – Oliver

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