2013-07-05 32 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

答えて

106

私はアクションでそれを示すplunkerを作りました。厳密な一致を有効にするには、フィルタにtrueを渡すことができます。

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

Refereces

https://docs.angularjs.org/api/ng/filter/filter

https://stackoverflow.com/a/18243147/1466430

+1

更新情報をありがとう。これははるかに簡単です。 – chrispr

+0

正確に私が感謝のために探していたもの – deKajoo

+0

ありがとう!多くの時間を節約しました –

8

filterは、独自のフィルタを実装できる機能を使用することもできます。 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

助けてくれてありがとう。多くの時間を節約できました。 –