2013-07-31 73 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-repeat標記的刷新最好的辦法時,$範圍.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

使用angularjs過濾器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濾鏡,用於Array of Objects。這樣你的控制器會更輕。但你也是對的。 – Oliver