如果电影具有所选类别,我正在寻找检查每部电影的方法。电影是一个包含对象的数组,这些对象具有一些属性,您可以在下面的代码中看到。 categories属性是电影所在的类别数组。现在有一个变量selectedCategories,其中存储了当前所选类别。
我不想使用自定义过滤器,因为我认为可以使用自定义过滤器,我只是无法得到它。在javascript函数中,也不能改变太多。
如果hasSelectedCategory的返回为true,则必须执行该块,如果为false则不执行。
提前致谢。
//in the javascript file
scope.hasSelectedCategory = function(categories){
var hasCategory = false;
if (categories.indexOf(scope.selectedCategory) !== -1){
hasCategory = true;
}
return hasCategory;
};
//in the html file
<div class="movieListItem {{listItemView}}" ng-repeat="movie in movies | filter:{hasSelectedCategory(categories): true}">
<h4>{{movie.title}}</h4>
<a href="http://www.youtube.com/embed/{{movie.youtubeId}}?rel=0&autoplay=1">
<img ng-src="{{findPosterSource(movie)}}" class="poster"> </a>
<p ng-hide="listItemView === 'grid'">
{{movie.description}}
</p>
<div class="categories" >
<span ng-repeat="category in movie.categories"> <a ng-href="#">{{category}}</a> </span>
</div>
</div>
答案 0 :(得分:1)
你必须使用这样的过滤器:
ng-repeat="movie in movies | filter:hasSelectedCategory"
将为hasSelectedCategory
列表中的每个movie
调用movies
函数。要按选定的类别进行过滤,您可以使用如下函数:
$scope.hasSelectedCategory = function(movie) {
var hasCategory = false;
angular.forEach($scope.selectedCategories, function(selectedCategory) {
if (!hasCategory && movie.categories.indexOf(selectedCategory) !== -1) {
hasCategory = true;
}
});
return hasCategory;
};
<强> Demo (plunker) 强>