Ответ 1
Теперь это доступно внутри фильтра. Вы можете просто передать true для фильтра, чтобы включить строгое сопоставление.
<li ng-repeat="movie in movieList | filter : filters : true">{{ movie.title }}</li>
Refereces
Мне нужно отфильтровать список предметов по их категории. Я хочу, чтобы пользователь мог нажать кнопку, а затем применить фильтр к списку.
В настоящий момент я работаю в некоторой степени.
Скажем, например, у меня есть список фильмов, сделанных так:
<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, но также и фильмы с приключениями.
Есть ли способ получить точное соответствие с помощью фильтра?
Теперь это доступно внутри фильтра. Вы можете просто передать true для фильтра, чтобы включить строгое сопоставление.
<li ng-repeat="movie in movieList | filter : filters : true">{{ movie.title }}</li>
Refereces
Если кто-то хочет использовать фильтр со стороны JavaScript, вы можете сделать это как:
$scope.filtered = $filter('filter')($scope.movieList, { genre.name: filters.genre}, true);
Обратите внимание на значение true в конце... это означает, что это поиск точного соответствия.
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;
};