2013-07-31 27 views
6

ng-repeatタグにフィルタより大きい値を適用します。私は、次のカスタムフィルタ機能を書いた:Angularjs:ng-repeatのフィルタよりも大きい

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

を、私は次のHTMLコードでそれを使用します。

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

NGリピートタグ$スコープの更新をトリガするための最良の方法は何ですか.minPriceが更新されましたか?

+0

SZAが述べたように、それは自動的に更新さん、私は形で結合minPriceでミスを犯しました。謝罪いたします。 – Julien

答えて

10

それは自動でなければなりません。 $scope.minPriceが変更されると、リピーターは自動的に更新されます。

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

anglejsフィルタapiを使用してフィルタをフィルタサービスとして作成し、minPriceをパラメータとして追加します。

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

とテンプレートで

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

このフィドルの例を参照してください:http://jsfiddle.net/Zmetser/BNNSp/1/

+0

実際に再利用可能な場合にのみ登録済みのフィルタを作成するか、フィルター機能を共有できない複数のスコープで同じ種類のエンティティのフィルタリングを行っています –

+0

比較しているオブジェクトプロパティに針を渡すことができますそして、あなたはオブジェクトの配列のための再利用可能なGTフィルタを持っています。あなたのコントローラーはより軽いでしょう。しかし、あなたも正しいです。 – Oliver

関連する問題