You can write a custom filter on an object containing multiple values.
Demo: https://codepen.io/sumitridhal/pen/QvgNKR
HTML
<div class="container">
<h1>Movies</h1>
<div ng-init="movies = [
{title:'Man on the Moon', genre:'action'},
{title:'Meet the Robinsons', genre:'family'},
{title:'Sphere', genre:'drama'},
{title:'Sphere', genre:'family'},
{title:'Sphere', genre:'action'},
{title:'Sphere', genre:'drama'}
];" />
<input type="checkbox" ng-model="genrefilters.action" />Action
<br />
<input type="checkbox" ng-model="genrefilters.drama" />Drama
<br />
<input type="checkbox" ng-model="genrefilters.family" />Family
<br />{{genrefilters.action}}::{{genrefilters.drama}}::{{genrefilters.family}}
<ul>
<li ng-repeat="movie in movies | bygenre:genrefilters">{{movie.title}}: {{movie.genre}}</li>
</ul>
</div>
JS
angular.module('myFilters', []).
filter('bygenre', function () {
return function (movies, genres) {
if(genres){
let condition = [];
angular.forEach(genres, function(value, key){
if(value) condition.push(key);
});
console.log(condition);
let filtered = movies.filter(function(movie) {
return condition.indexOf(movie.genre) != -1;
});
return filtered;
} else
return [];
};
});
angular.bootstrap(document, ['myFilters']);