当前位置: 首页 > news >正文

AngularJS之Filter(二)

前言

本节我们来讲讲AngularJS中主要的部分之一,那就是过滤器,当从后台获取到的数据呈现到视图上时,此时可能需要对数据进行相应的转换,此时我们可以通过过滤器在不同页面进行不同数据的格式抓换,在AngularJS中有常见默认的过滤器,当然若不满足所需,我们可以自定义过滤器。

AngularJS默认过滤器

列举AngularJS中常见的过滤器,如下:

过滤器名称描述例子
 currency money格式化 {{ p.price | currency}}
 date 日期格式化 

{ p.orderDate | date : “dd MMM yyyy” }}

{{ p.orderDate | date : “shortDate” }}

 json 将JSON字符串生成一个JSON对象 

<tr ng-repeat="p in products">

<td colspan="4">{{p | json}}</td>

</tr>

 number 格式化数值并给出精确度位数 

{{ p.price | number : 0}} 

{{ p.price | number : 2}} 

 

uppercase

lowercase

 大小写转换 

{{ p.city | lowercase }}

{{ p.state | uppercase }}

 limitTo 控制列表渲染数据 <tr ng-repeat="p in products | limitTo:10">
 orderBy 排序 

<tr ng-repeat="p in products | orderBy : ‘name’”>

For descending order

<tr ng-repeat="p in products | orderBy : ‘-name’”>

默认过滤器示例

我们渲染一个产品列表并将产品名称转换为大写,产品类别小写,以及数量保留两位小数等。

UI

<body ng-controller="FilterCtrl">  
    <div class="panel panel-default">  
        <div class="panel-heading">  
            <h3>  
                产品个数  
                <span class="label label-primary">{{products.length}}</span>  
            </h3>  
        </div>  
        <div class="panel-body">  
            <table class="table table-striped table-bordered table-condensed">  
                <thead>  
                    <tr>  
                        <td>名称</td>  
                        <td>类别</td>  
                        <td>供给日期</td>  
                        <td class="text-right">数量</td>  
                        <td class="text-right">价格</td>  
                    </tr>  
                </thead>  
                <tbody>  
                    <tr ng-repeat="p in products | orderBy :'name'">  
                        <td>{{p.name | uppercase}}</td>  
                        <td>{{p.category | lowercase}}</td>  
                        <td>{{getExpiryDate(p.expiry) | date:"dd MMM yy"}}</td>  
                        <td class="text-right">{{p.quantity | number:2 }}</td>  
                        <td class="text-right">{{p.price | currency}}</td>  
                    </tr>  
                </tbody>  
            </table>  
        </div>  
    </div>  
</body>  

JS

app.controller('FilterCtrl', function ($scope) {  
    $scope.products = [  
                    { name: "Sony LED", category: "TV", price: 40000, quantity:10, expiry: 30 },  
                    { name: "Vivo xplay5", category: "Mobile", price: 35640, quantity: 08, expiry: 21 },  
                    { name: "LeTv", category: "TV", price: 36000, quantity: 5, expiry: 50 },  
                    { name: "Iphone 6 plus", category: "Mobile", price: 55000, quantity: 6, expiry: 60 },  
                    { name: "Galaxy s7 edge", category: "Mobile", price: 45000, quantity: 15, expiry: 50 },  
    ];  
  
    $scope.getExpiryDate = function (days) {  
        var now = new Date();  
        return now.setDate(now.getDate() + days);  
    }  
  
});  

最后生成如下:

自定义过滤器示例 

AngularJS不仅仅支持内部自构建的过滤器,而且还可以自定义过滤器来满足我们所需,若自定义过滤器此时我们需要 通过module.filter来实现,实际上内部是通过FilterProvider来实现。module.filter这个方法有两个参数,一个是需要创建的过滤器的名称,另外一个是创建一个factory函数来使得该自定义过滤器生效或者工作。

接下来我们实现一个自定义过滤器,该过滤器带一个参数,实现了再对照代码就明朗了。如下:

app.filter("properCase", function () {  
    return function (value, reverse) {  
        if (angular.isString(value)) {  
            var intermediate = reverse == false ? value.toUpperCase() : value.toLowerCase();  
            return (reverse == false ? intermediate[0].toLowerCase() :  
            intermediate[0].toUpperCase()) + intermediate.substr(1);  
        } else {  
            return value;  
        }  
    };  
});  

接下来在视图中将绑定的名称和类别修改成如下:

 <td>{{p.name | properCase}}</td>  
 <td>{{p.category | properCase : false}}</td>

结果如下:

混合过滤器示例 

当进行渲染数据时,有可能需要进行多次过滤此时我们就需要创建多个自定义过滤器或者内置过滤器和自定义过滤器混合使用。

我们首先对列表通过name来orderby一下,然后通过自定义过滤器移除前两条数据。

app.filter("skipRec", function () {  
    return function (data, count) {  
        if (angular.isArray(data) && angular.isNumber(count)) {  
            if (count > data.length || count < 1) {  
                return data;  
            } else {  
                return data.slice(count);  
            }  
        } else {  
            return data;  
        }  
    }  
});  

此时视图页面循环列表时我们将修改成如下:

 <tr ng-repeat="p in products | orderBy :'name' | skipRec:2">  
 .......
 <tr>

最终我们得到的结果如下:

总结

本节我们学习了AngularJS的过滤器,然后对默认过滤器、自定义过滤器以及混合过滤器统一进了相应的示例说明来加深理解,我们下节再见。

 

相关文章:

  • nginx 负载服务器优化
  • 【SSH网上商城项目实战14】商城首页UI的设计
  • eclipse+python+selenium+mysqldb环境搭建
  • 取模和与运算的优化
  • STORM_0007_Multi-Lang protocol of Storm/多语言协议的翻译
  • Jquery 中map()函数的用法
  • 大公司都有哪些开源项目~~~简化版
  • Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)
  • Arm开发板+Qt学习之路-multiple definition of
  • 清除windows系统垃圾文件简易脚本(bat)
  • 1225 八数码难题
  • ES6初探,什么是ES6
  • who命令
  • Android 采用Layout Inflater创建一个View对象
  • VS 类快捷键
  • [笔记] php常见简单功能及函数
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • eclipse的离线汉化
  • ES6 学习笔记(一)let,const和解构赋值
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • October CMS - 快速入门 9 Images And Galleries
  • React 快速上手 - 07 前端路由 react-router
  • redis学习笔记(三):列表、集合、有序集合
  • Sass Day-01
  • Vue2 SSR 的优化之旅
  • vuex 学习笔记 01
  • Vue学习第二天
  • 将回调地狱按在地上摩擦的Promise
  • 解决iview多表头动态更改列元素发生的错误
  • 浅谈Golang中select的用法
  • 微信开放平台全网发布【失败】的几点排查方法
  • 因为阿里,他们成了“杭漂”
  • ionic入门之数据绑定显示-1
  • 数据可视化之下发图实践
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • ​一些不规范的GTID使用场景
  • #define,static,const,三种常量的区别
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (02)vite环境变量配置
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (arch)linux 转换文件编码格式
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (南京观海微电子)——COF介绍
  • (转)IOS中获取各种文件的目录路径的方法
  • (转载)利用webkit抓取动态网页和链接
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .form文件_SSM框架文件上传篇
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...