2014-09-18 4 views
0

동영상에 선택한 카테고리가있는 경우 각 동영상을 확인하는 방법을 찾고 있습니다. 무비는 객체를 포함하는 배열이며, 그 객체는 아래 코드에서 볼 수있는 것처럼 몇 가지 속성을 가지고 있습니다. categories 속성은 무비가있는 범주의 배열입니다. 이제는 현재 선택된 범주가 저장되는 selectedCategories 변수가 있습니다.AngularJS 반복 재생 필터, 객체 속성 초과 기능

사용자 정의 필터를 사용하고 싶지 않습니다. 이걸로 가능할뿐입니다. 자바 스크립트 함수에서 너무 많이 변경 될 수 없습니다.

hasSelectedCategory가 true이면 false이고 그렇지 않으면 블록을 실행해야합니다.

미리 감사드립니다.

ng-repeat="movie in movies | filter:hasSelectedCategory" 

hasSelectedCategory 기능이 movies 목록의 각 movie에 대해 호출됩니다

//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

는이 같은 필터를 사용합니다. 선택한 카테고리별로 필터링하기 위해이 같은 기능을 사용할 수 있습니다 :

$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)

+0

감사합니다 많이! :) – Gerdinand