关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » UI前端 »AngularJS Filter用法详解

    AngularJS Filter用法详解

    2015-05-20 00:00:00 出处:icodeit
    分享

    上一篇讲了AngularJS自定义Directive,该文是要讲到AngularJS的Filter。

    Filter简介

    Filter是用来格式化数据用的。

    Filter的基本原型( ‘|’ 类似于Linux中的管道模式):

    {{ expression | filter }}

    Filter可以被链式使用(即连续使用多个filter):

    {{ expression | filter1 | filter2 | ... }}

    Filter也可以指定多个参数:

    {{ expression | filter:argument1:argument2:... }}

    AngularJS内建的Filter

    AngularJS内建了一些常用的Filter,我们一一来看一下。

    currencyFilter(currency):

    用途:格式化货币

    方法原型:

    function(amount, currencySymbol, fractionSize)

    用法:

    1 {{ 12 | currency}}  <!--将12格式化为货币,默认单位符号为 '$', 小数默认2位-->
    2 
    3 {{ 12.45 | currency:'¥'}} <!--将12.45格式化为货币,使用自定义单位符号为 '¥', 小数默认2位-->
    4 
    5 {{ 12.45 | currency:'CHY¥':1}} <!--将12.45格式化为货币,使用自定义单位符号为 'CHY¥', 小数指定1位, 会执行四舍五入操作 -->
    6 
    7 {{ 12.55 | currency:undefined:0}} <!--将12.55格式化为货币, 不改变单位符号, 小数部分将四舍五入 -->

    dateFilter(date):

    用途:格式化日期

    方法原型:

    function(date, format, timezone)

    用法:

    <!--使用ISO标准日期格式 -->
    {{ '2015-05-20T03:56:16.887Z' | date:"MM/dd/yyyy @ h:mma"}}
    
    <!--使用13位(单位:毫秒)时间戳 -->
    {{ 1432075948123 | date:"MM/dd/yyyy @ h:mma"}}
    
    <!--指定timezone为UTC -->
    {{ 1432075948123 | date:"MM/dd/yyyy @ h:mma":"UTC"}}

    filterFilter(filter):

    用途:过滤数组

    方法原型:

    function(array, expression, comparator)

    用法1(参数expression使用String):

    1 <div ng-init="myArr = [{name:'Tom', age:20}, {name:'Tom Senior', age:50}, {name:'May', age:21}, {name:'Jack', age:20}, {name:'Alice', age:22}]">
    2     <!-- 参数expression使用String,将全文搜索关键字 'a' -->
    3     <div ng-repeat="u in myArr | filter:'a' ">
    4         <p>Name:{{u.name}}</p>
    5         <p>Age:{{u.age}}</p>
    6         <br />
    7     </div>
    8 </div>

    用法2(参数expression使用function):

     1 // 先在Controller中定义function: myFilter
     2 $scope.myFilter = function (item) {
     3     return item.age === 20;
     4 };
     5 
     6 <div ng-repeat="u in myArr | filter:myFilter ">
     7     <p>Name:{{u.name}}</p>
     8     <p>Age:{{u.age}}</p>
     9     <br />
    10 </div>

    用法3(参数expression使用object):

    1 <div ng-init="myArr = [{name:'Tom', age:20}, {name:'Tom Senior', age:50}, {name:'May', age:21}, {name:'Jack', age:20}, {name:'Alice', age:22}]">
    2     <div ng-repeat="u in myArr | filter:{age: 21} ">
    3         <p>Name:{{u.name}}</p>
    4         <p>Age:{{u.age}}</p>
    5         <br />
    6     </div>
    7 </div>

    用法4(指定comparator为true或false):

     1 <div ng-init="myArr = [{name:'Tom', age:20}, {name:'Tom Senior', age:50}, {name:'May', age:21}, {name:'Jack', age:20}, {name:'Alice', age:22}]">
     2     Name:<input ng-model="yourName" />
     3     <!-- 指定comparator为false或者undefined,即为默认值可不传,将以大小写不敏感的方式匹配任意内容 -->
     4     <!-- 可以试试把下面代码的comparator为true,true即大小写及内容均需完全匹配 -->
     5     <div ng-repeat="u in myArr | filter:{name:yourName}:false ">
     6         <p>Name:{{u.name}}</p>
     7         <p>Age:{{u.age}}</p>
     8         <br />
     9     </div>
    10 </div>

    用法5(指定comparator为function):

     1 // 先在Controller中定义function:myComparator, 此function将能匹配大小写不敏感的内容,但与comparator为false的情况不同的是,comparator必须匹配全文
     2 $scope.myComparator = function (expected, actual) {
     3     return angular.equals(expected.toLowerCase(), actual.toLowerCase());
     4 }
     5 
     6 <div ng-init="myArr = [{name:'Tom', age:20}, {name:'Tom Senior', age:50}, {name:'May', age:21}, {name:'Jack', age:20}, {name:'Alice', age:22}]">
     7     Name:<input ng-model="yourName" />
     8     <div ng-repeat="u in myArr | filter:{name:yourName}:myComparator ">
     9         <p>Name:{{u.name}}</p>
    10         <p>Age:{{u.age}}</p>
    11         <br />
    12     </div>
    13 </div>

    jsonFilter(json):

    方法原型:

    function(object, spacing)

    用法(将对象格式化成标准的JSON格式):

    {{ {name:'Jack', age: 21} | json}}

    limitToFilter(limitTo):

    方法原型:

    function(input, limit)

    用法(选取前N个记录):

    1 <div ng-init="myArr = [{name:'Tom', age:20}, {name:'Tom Senior', age:50}, {name:'May', age:21}, {name:'Jack', age:20}, {name:'Alice', age:22}]">
    2     <div ng-repeat="u in myArr | limitTo:2">
    3         <p>Name:{{u.name}}
    4         <p>Age:{{u.age}}
    5     </div>
    6 </div>

    lowercaseFilter(lowercase)/uppercaseFilter(uppercase):

    方法原型:

    function(string)

    用法:

    China has joined the {{ "wto" | uppercase }}.
    We all need {{ "MONEY" | lowercase }}.

    numberFilter(number):

    方法原型:

    function(number, fractionSize)

    用法:

    {{ "3456789" | number}}
    <br />
    {{ true | number}}
    <br />
    {{ 12345678 | number:1}}

    orderByFilter(orderBy):

    方法原型:

    function(array, sortPredicate, reverseOrder)

    用法:

     1 <div ng-init="myArr = [{name:'Tom', age:20, deposit: 300}, {name:'Tom', age:22, deposit: 200}, {name:'Tom Senior', age:50, deposit: 200}, {name:'May', age:21, deposit: 300}, {name:'Jack', age:20, deposit:100}, {name:'Alice', age:22, deposit: 150}]">
     2     <!--deposit前面的'-'表示deposit这列倒叙排序,默认为顺序排序
     3     参数reverseOrder:true表示结果集倒叙显示-->
     4     <div ng-repeat="u in myArr | orderBy:['name','-deposit']:true">
     5         <p>Name:{{u.name}}</p>
     6         <p>Deposit:{{u.deposit}}</p>
     7         <p>Age:{{u.age}}</p>
     8         <br />
     9     </div>
    10 </div>

    自定义Filter

    和Directive一样,假如内建的Filter不能满足你的需求,你当然可以定义一个专属于你自己的Filter。我们来做一个自己的Filter:capitalize_as_you_want,该Filter会使你输入的字符串中的首字母、指定index位置字母以及指定的字母全部大写。

    方法原型:

    function (input, capitalize_index, specified_char)

    完整的示例代码:

     1 <!DOCTYPE>
     2 <html>
     3 <head>
     4     <script src="/Scripts/angular.js"></script>
     5     <script type="text/javascript">
     6         (function () {
     7             var app = angular.module('ngCustomFilterTest', []);
     8 
     9             app.filter('capitalize_as_you_want', function () {
    10                 return function (input, capitalize_index, specified_char) {
    11                     input = input || '';
    12                     var output = '';
    13 
    14                     var customCapIndex = capitalize_index || -1;
    15 
    16                     var specifiedChar = specified_char || '';
    17 
    18                     for (var i = 0; i < input.length; i++) {
    19                         // 首字母肯定是大写的, 指定的index的字母也大写
    20                         if (i === 0 || i === customCapIndex) {
    21                             output += input[i].toUpperCase();
    22                         }
    23                         else {
    24                             // 指定的字母也大写
    25                             if (specified_char != '' && input[i] === specified_char) {
    26                                 output += input[i].toUpperCase();
    27                             }
    28                             else {
    29                                 output += input[i];
    30                             }
    31                         }
    32                     }
    33 
    34                     return output;
    35                 };
    36             });
    37 
    38         })();
    39     </script>
    40 </head>
    41 <body ng-app="ngCustomFilterTest">
    42     <input ng-model="yourinput" type="text">
    43     <br />
    44     Result: {{ yourinput | capitalize_as_you_want:3:'b' }}
    45 </body>
    46 </html>

    好了,该文讲了AngularJS中的Filter,看完这篇后,我们可以利用好Filter非常方便的使数据能按我们的要求进行展示,从而使页面变得更生动。

    参考资料

    AngularJS官方文档:https://docs.angularjs.org/guide/filter

    CodeSchool快速入门视频:http://campus.codeschool.com/courses/shaping-up-with-angular-js/intro

    Fun with AngularJS filter: http://sarahbranon.com/post/69604997957/fun-with-angularjs-filters-part-1-the-filter

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    正版 Windows 11产品密钥怎么查找/查看?

    还有3个月,微软将停止 Windows 10 的更新

    Windows 10 终止支持后,企业为何要立即升级?

    Windows 10 将于 2025年10 月终止技术支持,建议迁移到 Windows 11

    Windows 12 发布推迟,微软正全力筹备Windows 11 25H2更新

    Linux 退出 mail的命令是什么

    Linux 提醒 No space left on device,但我的空间看起来还有不少空余呢

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    IT头条

    公安部:我国在售汽车搭载的“智驾”系统都不具备“自动驾驶”功能

    02:03

    液冷服务器概念股走强,博汇、润泽等液冷概念股票大涨

    01:17

    亚太地区的 AI 驱动型医疗保健:2025 年及以后的下一步是什么?

    16:30

    智能手机市场风云:iPhone领跑销量榜,华为缺席引争议

    15:43

    大数据算法和“老师傅”经验叠加 智慧化收储粮食尽显“科技范”

    15:17

    技术热点

    商业智能成CIO优先关注点 技术落地方显成效(1)

    用linux安装MySQL时产生问题破解

    JAVA中关于Map的九大问题

    windows 7旗舰版无法使用远程登录如何开启telnet服务

    Android View 事件分发机制详解

    MySQL用户变量的用法

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。