ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [AngularJS] 9. 필터(Filter) 사용 - AngularJS 강좌
    Web/AngularJS 2016. 4. 8. 13:16

    필터(Filter) 사용

     AJS 필터는 크게 두 가지 용도로 사용됩니다.


     첫번째로 데이터를 보이는 폼을 바꾸는 데 사용됩니다.


     두번째로 여러 데이터 중 조건에 맞는 데이터만 보여줄 때 사용됩니다.


     즉, 포맷팅(Formatting)과 필터링(Filtering)하는데 사용된다고 볼 수 있습니다.




     1. AngularJS에서 제공하는 필터

      아래는 AJS에서 제공하는 필터와 그에 대한 설명입니다.





    [출처: AngularJS]




      그럼 예제를 통해서 포맷팅 필터를 살펴보도록 합시다.


     * ajsFilter.html


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <!doctype html>
    <html ng-app="filterExam">
        <head>
            <meta charset="UTF-8"/>
            <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular.min.js"></script>
            <script type="text/javascript">
                angular.module('filterExam', []).
                    controller('mainCtrl', ['$scope'function($scope) {
                        $scope.cValue = 19900;
                        $scope.dNow = new Date();
                        $scope.jObj = {name'Palpit'};
                        $scope.lString = 'Palpit Moon';
                        $scope.nValue = 10 / 3;
                    }]);
            </script>
        </head>
        <body>
            <div ng-controller="mainCtrl">
                <h1>필터 적용 예제</h1>
                <h2>Currency 필터</h2>
                <p> Before: {{cValue}}</p>
                <p> After: {{cValue | currency}}</p>
                <h2>date 필터</h2>
                <p> Before: {{dNow}}</p>
                <p> After: {{dNow | date:'yyyy년 mm월 dd일'}}</p>
                <h2>JSON 필터</h2>
                <p> Before: {{jObj}}</p>
                <p> After: {{jObj | json}}</p>
                <h2>lowercase 필터</h2>
                <p> Before: {{lString}}</p>
                <p> After: {{lString | lowercase}}</p>
                <h2>number 필터</h2>
                <p> Before: {{nValue}}</p>
                <p> After: {{nValue | number:5}}</p>
            </div>
        </body>
    </html>
    cs





      각 필터가 주어진 데이터를 포맷팅하여 화면에 출력합니다. 


      다음은 필터를 이용해 여러 데이터를 필터링하여 보여주는 filter, limitTo, orderBy 필터 예제를 보도록 합시다.



     * ajsFilter2.html


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    <!doctype html>
    <html ng-app="filterExam">
        <head>
            <meta charset="UTF-8"/>
            <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular.min.js"></script>
            <script type="text/javascript">
                angular.module('filterExam', []).
                    controller('mainCtrl', ['$scope'function($scope) {
                        $scope.userList = [
                            {userId: 'pal', userName: 'Jolie', userEmail: 'pal@ajs.com'},
                            {userId: 'jake', userName: 'Anthem', userEmail: 'jake@ajs.com'},
                            {userId: 'paul', userName: 'Paul', userEmail: 'paul@ajs.com'},
                            {userId: 'kino', userName: 'Kino', userEmail: 'kino@ajs.com'},
                            {userId: 'ash', userName: 'Ashey', userEmail: 'ash@ajs.com'},
                            {userId: 'xeo', userName: 'XeoroX', userEmail: 'xeo@ajs.com'},
                        ];
                    }]);
            </script>
        </head>
        <body>
            <div ng-controller="mainCtrl">
                <h1> 필터 사용 예제 </h1>
                <div>사용자 이름: <input type="text" ng-model="search.userName"></div>
                <ul>
                    <li ng-repeat="user in userList | filter: search">
                        <p>{{user.userId}} | {{user.userName}} | {{user.userEmail}}</p>
                    </li
                </ul>
                <h1> limitTo 예제 </h1>
                <div>제한 개수: <input type="number" ng-model="limitNum"></div>
                <ul>
                    <li ng-repeat="user in userList | limitTo: limitNum">
                        <p>{{user.userId}} | {{user.userName}} | {{user.userEmail}}</p>
                    </li
                </ul>
                <h1> orderBy 예제 </h1>
                <div>
                    정렬 순서:
                    아이디 <input type="radio" ng-model="order" value="userId">
                    이름 <input type="radio" ng-model="order" value="userName">
                    <br/>
                    역순 여부:
                    <input type="checkbox" ng-model="reverse">
                </div>
                <ul>
                    <li ng-repeat="user in userList | orderBy:order:reverse">
                        <p>{{user.userId}} | {{user.userName}} | {{user.userEmail}}</p>
                    </li
                </ul>
     
            </div>
        </body>
    </html>
    cs





      위 두 예제에서는 모두 템플릿에서 필터를 사용했습니다. 하지만 템플릿이 아닌 컨트롤러나 서비스, 지시자에서도 필터를 사용할 수 있습니다. 


      필터를 템플릿 외에 자바스크립트에서 사용하려면 $filter 서비스를 이용해야 합니다. 



     * ajsFilter3.html


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    <!doctype html>
    <html ng-app="filterExam">
        <head>
            <meta charset="UTF-8"/>
            <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular.min.js"></script>
            <script type="text/javascript">
                angular.module('filterExam', []).
                    controller('mainCtrl', ['$scope''$filter'function($scope, $filter) {
                        var userList = [
                            {userId: 'pal', userName: 'Jolie', userEmail: 'pal@ajs.com'},
                            {userId: 'jake', userName: 'Anthem', userEmail: 'jake@ajs.com'},
                            {userId: 'paul', userName: 'Paul', userEmail: 'paul@ajs.com'},
                            {userId: 'kino', userName: 'Kino', userEmail: 'kino@ajs.com'},
                            {userId: 'ash', userName: 'Ashey', userEmail: 'ash@ajs.com'},
                            {userId: 'xeo', userName: 'XeoroX', userEmail: 'xeo@ajs.com'},
                        ];
     
                        $scope.value = new Date();
                        $scope.dateFormatedValue = $filter('date')($scope.value, 'yyyy-mm-dd');
                        $scope.userList = userList;
                        $scope.filter = function(filterObj) {
                            $scope.userList = $filter('filter')(userList, filterObj);
                        };
                    }]);
            </script>
        </head>
        <body>
            <div ng-controller="mainCtrl">
                <p> 필터 사용 전 날짜 데이터: {{value}} </p>
                <p> date 필터 사용: {{dateFormatedValue}} </p>
                <hr>
                <div>
                    사용자 이름: <input type="text" ng-model="search.userName">
                    <button ng-click="filter(search)">필터 처리</button>
                </div>
                <ul>
                    <li ng-repeat="user in userList">
                        <p>{{user.userId}} | {{user.userName}} | {{user.userEmail}}</p>
                    </li>
                </ul>
            </div>
        </body>
    </html>
    cs









      mainCtrl 함수에서 $filter 서비스를 주입받는 것을 볼 수 있습니다. 이 $filter 서비스에서 사용하고자 하는 필터 이름을 인자로 주고 함수를 호출하면 해당 필터 함수를 가지고 올 수 있습니다. AJS는 $filter 서비르를 이용해 등록된 필터 함수를 얻을 수 있고 이렇게 얻은 필터 함수를 이용해 특정 데이터를 포맷하거나 필터 처리 할 수 있습니다.





     2. 필터 만들기

       AJS는 다양한 내장 필터를 제공하지만, 원하는 필터 개발도 가능합니다. 개발을 하기 위해서는 $filterProvider를 사용하면 됩니다.


       $filterProvider에서 register 메서드를 이용해 사용자 정의 필터를 등록할 수 있습니다. 


      그럼 예제를 통해 $filterProvider의 register 메서드 사용법을 알아보도록 합시다.


     * ajsFilter4.html


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <!doctype html>
    <html ng-app="filterExam">
        <head>
            <meta charset="UTF-8"/>
            <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular.min.js"></script>
            <script type="text/javascript">
                angular.module('filterExam', []).
                    config(function($filterProvider) {
                        $filterProvider.register('capitalize'function() {
                            return function(text) {
                                return text.charAt(0).toUpperCase() + text.slice(1);
                            };
                        });
                    }).
                    controller('mainCtrl', ['$scope'function($scope) {
                        $scope.text = "temp";
                    }]);
            </script>
        </head>
        <body>
            <div ng-controller="mainCtrl">
                <p>{{text | capitalize}}</p>
            </div>
        </body>
    </html>
    cs







     

    end


    * 이 포스팅은 '시작하세요! AngularJS 프로그래밍'을 바탕으로 작성하였습니다.

    댓글

Designed by Tistory.