AngularJS ng-repeat过滤器,对象属性的功能

时间:2014-09-18 12:11:55

标签: angularjs angularjs-ng-repeat angular-filters

如果电影具有所选类别,我正在寻找检查每部电影的方法。电影是一个包含对象的数组,这些对象具有一些属性,您可以在下面的代码中看到。 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>

1 个答案:

答案 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)