Подтвердить что ты не робот

Точное совпадение с угловым фильтром

Мне нужно отфильтровать список предметов по их категории. Я хочу, чтобы пользователь мог нажать кнопку, а затем применить фильтр к списку.

В настоящий момент я работаю в некоторой степени.

Скажем, например, у меня есть список фильмов, сделанных так:

<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 жанра: "Действие" и "Приключение действий". Когда я фильтрую фильмы с жанром "Действие", я не только получаю список фильмов Action, но также и фильмы с приключениями.

Есть ли способ получить точное соответствие с помощью фильтра?

4b9b3361

Ответ 1

Теперь это доступно внутри фильтра. Вы можете просто передать true для фильтра, чтобы включить строгое сопоставление.

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

Refereces

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

fooobar.com/questions/130453/...

Ответ 2

Если кто-то хочет использовать фильтр со стороны JavaScript, вы можете сделать это как:

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

Обратите внимание на значение true в конце... это означает, что это поиск точного соответствия.

Ответ 3

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;
};