AngularJS | 필터 | 커스텀 필터
필터는 기본적으로 제공되는 것뿐만 아니라 사용자가 직접 필터를 만들 수 있다. 이 커스텀(사용자 정의) 필터는 다음과 같은 형태로 정의된다.
컨트롤러.filter(이름, 함수);
컨트롤러 filter 메소드를 사용하여 필터를 등록한다. 인수에는 필터 이름과 필터 처리를 구현한 함수가 필요하다.
인수에 설정되는 함수는 대체로 다음과 같은 형태로 정의해야 한다.
function(val) {
...... 중략 ......
return 값;
}
인수로 전달되는 것이 필터에 걸린 원래 값이다. 그리고 return하는 것이 필터링된 값이다. 즉, 함수에서 인수 값을 어떻게 변환하여 return할지 생각하면서 코딩하면 필터는 비교적 쉽게 만들 수 있다.
getIt 필터
그럼 간단한 예제를 만들어 보자. 컨트롤러에 준비되어 있는 data에 구입 여부를 부울값으로 나타내는 “get"값이 있었다. 이것을 좀 더 알기 쉽게 표시하는 필터를 생각해 보다.
아래에 예제을 올려 두었다.
helo.filter('getIt',
function(){
return function(val) {
return val ? "✔" : "-";
};
}
);
이를 script.js 끝에 추가한다. 그리고 HTML 파일의 get을 표시하고 있는 부분인 {{obj.get}}
여기에 다음과 같이 수정한다.
<td>{{obj.get | getIt}}</td>
이렇게 get에 필터를 넣으면 “✔"가 표시되는 것을 확인할 수 있다. 여기에서 val의 값에 따라 “✔"또는 “-“중 하나를 return하도록 되어 있는데, true라면 “✔”, false이면 “-“로 표시되게 된다.
필터에 값을 설정
필터에는 currency나 date처럼 어떤 값을 설정하고 호출 할 수도 있다. 여기서 그 방법을 설명한다.
이는 간단합니다. 필터 함수를 정의할 때, 두번째 인수를 지정하여 값을 전달할 수 있다.
앞에서 만든 필터 getIt을 수정하여 값을 전달할 수 있도록 해보자. 아래에 간단한 예제를 올려두었다.
helo.filter('getIt',
function(){
return function(val,opt) {
var t = (opt == null) ? '✔' : opt;
return val ? t : '-';
};
}
);
두번째 인수 opt의 값이 null 없는지 확인하고, null가 아닌 경우는 true시에 return하도록 수정되었다. null의 경우는 “✔"를 return한다.
그러고 HTML 파일의 obj.get을 출력하고 있는 부분에 다음과 같이 수정한다.
<td>{{obj.get | getIt:'●'}}</td>
이것으로 값이 true라고 “●”, false이면 “-“로 표시되도록 되었다. getit : '●'
와 같이 준비한 값이 그대로 true의 표시가 되는 것이다. 또 다른 값을 변경하여 표시가 잘되는지 확인해 본다.
필터는 인수에 어떻게 return 값을 생성되는지 알면 의외로 간단히 만들 수 있다. 또한 만든 필터를 이용하는 것도 매우 간단하다. 용도에 따라 자신만의 필터를 만들 수 있게 되면, 표현력도 훨씬 좋아진다.