1. 程式人生 > >深究AngularJS——過濾器(filter)

深究AngularJS——過濾器(filter)

寫這個的目的是希望能學會如何在指令里加入自己的過濾器。

1.關於過濾器你需要了解這些

1.過濾器的作用

是將我們的現有的資料進行處理,比如重排序、轉換大小寫、計算等等,處理完了再返回一個結果。

2.AngularJS自帶的過濾器

過濾器 描述
currency 格式化數字為貨幣格式。
filter 從陣列項中選擇一個子集。
lowercase 格式化字串為小寫。
orderBy 根據某個欄位屬性重新排序。
uppercase 格式化字串為大寫。

3.使用過濾器

可在如下三個地方使用過濾器,在頁面上使用時,通過一個管道符(|)和過濾器名字,

<body>
<div ng-app="myApp" ng-controller="myCtrl"> 
    <!-- 1.在表示式中使用過濾器 -->
    <h1>{{"xywz" | uppercase}}</h1>
    <!-- 2.在指令中使用過濾器 -->
    <p ng-repeat="r in data |orderBy :'time'">{{r.result}}</p>
</div>

<script>
    var app = angular.module('myApp'
, []); //3.控制器中使用過濾器 app.controller('myCtrl', function($scope, $filter) { $scope.data = [{'time':2014,'result':'賺錢了'},{'time':2015,'result':'虧大發了'}] ; console.log($filter("orderBy")($scope.data,"time")); });
</script> </body>

2.如何寫自己的過濾器(關鍵)

我以一個將字串折分成陣列的過濾器舉例。在頁面上需要傳兩引數時,就在過濾器後面以冒號(:)隔開,如下面要傳的分割器;在頁面要實現傳三個及以上的引數時,我們可以通過在過濾器後面繼續加冒號( :) 和引數的格式新增。總結就是,第一個引數是管道符號前面的資料,多個引數時,在過濾器名稱後面以冒號隔開

<body>
<div ng-app="myApp" ng-controller="myCtrl"> 
    <p ng-repeat="r in data | toArray">{{r}}</p>
    <p ng-repeat="r in data2 | toArray:';'">{{r}}</p>
</div>

<script>
    var app = angular.module('myApp', []);
    //控制器
    app.controller('myCtrl', function($scope, $filter) {
        $scope.data ="abc,mn,大山,綠水";
        $scope.data2 ="abc;mn;大山;綠水";//需要給定分割器

    });
    //將字串分割成陣列
    app.filter("toArray",function(){
            return function(data,separator){
                if(data){
                    if(!separator) {
                        separator = ",";//預設逗號分割
                    }
                 return data.split(separator);
                }else{
                    return [];//得到的結果型別始終為陣列型別              }
            }
    });
</script>
</body>

3.過濾器中注入服務

<body>
<div ng-app="myApp">
    在過濾器中使用服務:
    <h1>{{255 | myFormat}}</h1>
</div>

<script>
    var app = angular.module('myApp', []);
    //自定義服務
    app.service('hexafy', function() {
        this.myFunc = function (x) {
            return x.toString(16);
        }
    });
    //過濾器
    app.filter('myFormat',['hexafy', function(hexafy) {
        return function(x) {
            return hexafy.myFunc(x);
        };
    }]);
</script>
</body>