2013-07-31 11 views
6

Stosuję większy niż filtr do tagu powtórzenia ng. Pisałem następującą funkcję niestandardowy filtr:Angularjs: większy niż filtr z powtórzeniem ng

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

i używam go w następujący kod HTML:

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

Jaki jest najlepszy sposób, aby wywołać odświeżania znacznika ng-repeat gdy $ zakres .minCrice jest zaktualizowany?

+0

To jest odświeżany automatycznie podana przez Sza, zrobiłem błąd w minPrice wiązania w formie. Przepraszam. – Julien

Odpowiedz

10

To powinno być automatyczne. Po zmianie wartości $scope.minPrice przekaźnik zostanie automatycznie zaktualizowany.

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

Utwórz filtr jako usługę filtrującą, korzystając z api filtra angularjs i dodaj parametr minPrice jako parametr.

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

i w szablonie

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

Zobacz przykład w tym skrzypce: http://jsfiddle.net/Zmetser/BNNSp/1/

+0

Chciałbym utworzyć zarejestrowany filtr tylko wtedy, gdy jest on w rzeczywistości wielokrotnego użytku lub robię filtrowanie tego samego typu obiektu w wielu zakresach, które nie mogą współdzielić funkcji filtru. –

+0

Możesz przekazać igłę do właściwości obiektu, którą porównujesz do, i masz filtr GT wielokrotnego użytku dla Array of Objects. W ten sposób kontroler będzie lżejszy. Ale ty też masz rację. – Oliver