天天看點

深究AngularJS——過濾器(filter)1.關于過濾器你需要了解這些2.如何寫自己的過濾器(關鍵)3.過濾器中注入服務

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

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':,'result':'賺錢了'},{'time':,'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();
        }
    });
    //過濾器
    app.filter('myFormat',['hexafy', function(hexafy) {
        return function(x) {
            return hexafy.myFunc(x);
        };
    }]);
</script>
</body>