56

我需要按类别过滤项目列表。我希望用户能够单击一个按钮,然后将过滤器应用于列表。

目前,我在一定程度上有这个工作。

例如,假设我有一个电影列表,如下所示:

<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()' 函数所做的只是更新范围以显示当前正在查看的流派)。

现在这工作正常,直到我遇到一种情况,比如我有两种类型:“动作”和“动作冒险”。当我按类型为“动作”的电影进行过滤时,我不仅会获得动作电影列表,还会获得动作冒险电影的列表。

有没有办法可以使用过滤器获得完全匹配?

4

3 回答 3

135

这现在在过滤器中本地提供。您可以将 true 传递给过滤器以启用严格匹配。

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

参考

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

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

于 2014-07-04T08:58:26.547 回答
47

如果有人想在 JavaScript 端使用过滤器,你可以这样做:

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

注意最后的 true ......它表示要搜索完全匹配。

于 2015-01-14T22:55:11.570 回答
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;
};
于 2013-07-05T04:24:53.863 回答