2014-10-07 4 views
0

저는 AngularJS 필터가 작동하는 방식을 좋아하고 배열에 값이 있는지 확인하는 데 사용할 수 있도록 기존 함수에 함수를 추가하려고합니다.AngularJS 필터 확장 또는 사용자 정의 필터 빌드

나는 다음과 같은 데이터가있는 경우 :

Queue = [ 
    {'Name':'John','Tier':'Gold','Status':'VIP'}, 
    {'Name':'Anna','Tier':'Silver','Status':'Normal'}, 
    {'Name':'Luke','Tier':'Gold','Status':'Normal'}, 
    {'Name':'Mary','Tier':'Bronze','Status':'Normal'}, 
    {'Name':'Jess','Tier':'Bronze','Status':'VIP'}, 
]; 
Priority = ['Gold','Silver']; 

가 나는 또한 VIP를 모두 내 우선 순위 구성원의 이름을 나열하고자합니다.

Tier가 우선 순위 배열의 항목 중 하나와 같은지 확인하기 위해 필터 기능을 추가하고 싶습니다.

AngularJS를 사용하여 맞춤 필터를 만들었지 만 고객 필터가 기존 필터와 동일한 방식으로 작동하도록하는 방법, 즉 기존 필터처럼 개체, 문자열 또는 기능을 처리 할 수있는 방법을 모르겠습니다.

배열에 항목이 있는지 확인하는 코드가 아니기 때문에 동일한 방법으로 필터를 작성한 코드에서 코드를 추가하여 주어진 값이 맞는지 확인할 수 있습니다. 문자열 또는 배열.

답변

0

나는 사용자 정의 필터에 의해 확인이 경우 정규 표현식을 사용합니다 : 당신이 필터에 인수를 전달하면 유는 다음과 같이 적어 수 있습니다. .html 중에서에서는

:

<body ng-app="myApp"> 
    <tr ng-repeat="item in Queue | regex:'Tier':Priority | filter:{Status :'VIP'}"> 
    </body> 

그리고 사용자 정의 필터 :

var myApp = angular.module('myApp', []); 
myApp.filter('regex', function() { 
    return function(input, field, priList) { 
    var result = []; 
    var priListExp = priList.join("|"); 
    var patt = new RegExp(priListExp, "i"); // without , "i" if you want to use case insensitive 
     input.forEach(function(pri){ 
     if(patt.test(pri[field])) { 
      result.push(pri); 
     } 
    }); 

    return result; 
    } 
}); 

데모 : Plunker

0

이것은 작동 코드가 아닌 아이디어입니다. HTML에서

module.filter('filterName', function() { 
return function(input, tier, status) { 
if (input.Tier == tier) 
{ 
    //do something 
} 
if (input.Status == status) 
{ 
    //do something 
} 
return input; 
} 
}); 

-

<div ng-repeat="people in Queue | filterName:'Priority':'VIP'">{{ people.Name }}</div> 
관련 문제