深究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>
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值