2013-07-05 100 views
41

我需要按其類別過濾項目列表。我希望用戶能夠點擊一個按鈕,然後將過濾器應用到列表中。AngularJS過濾器完全匹配

目前,我在某種程度上工作。

比方說,比如我有電影列表,呈現像這樣:

<li ng-repeat="movie in movieList | filter:filters">{{ movie.title }}</li> 

而且我也有電影類型的列表(呈現爲按鈕,點擊它會過濾電影列表時)呈現像這樣:

<li ng-repeat="genre in genres"> 
    <a ng-click="filters.genre = genre.name" ng-click='changeGenre(genre.name)'>{{genre.name}}</a> 
</li> 

(所有'changeGenre()函數的作用是更新的範圍,以顯示當前正在查看哪個流派)。

現在這個工作正常,直到我有一種情況,說我有2種類型:'行動'和'行動冒險'。當我用類型爲「動作」的電影過濾時,我不僅獲得了動作電影的列表,還獲得了動作冒險電影。

有沒有一種方法可以使用過濾器進行精確匹配?

+1

相信你想寫一個自定義過濾器http://www.youtube.com/watch?v=zdfseHACtCg – shaunhusain

回答

8

filter也可以採用一個功能,您可以實現自己的過濾器。我做了展示在行動它plunker:http://plnkr.co/edit/v0uzGS?p=preview

下面是相關代碼:

$scope.ChooseGenreFunction = function(genre) { 
    $scope.filters = function(movie) { 
    return movie.genre === genre; 
    }; 
}; 
$scope.ChooseGenreString = function(genre) { 
    $scope.filters = genre; 
}; 
+0

謝謝你!你是英雄 –

+2

@ jtseng編輯你的答案使用'==='而不是'==' – bguiz

28

如果有人想使用的過濾器的JavaScript端,你可以不喜歡它:

$scope.filtered = $filter('filter')($scope.movieList, { genre.name: filters.genre}, true); 

公告的真實最後......它表明要搜索h爲完全匹配。

+3

謝謝您添加JS版本! – mhodges

+0

感謝您的幫助。節省了很多時間。 –