浅析AngularJS Filter用法


Posted in Javascript onDecember 28, 2015

系统的学习了一下angularjs,发现angularjs的有些思想根php的模块smarty很像,例如数据绑定,filter。如果对smarty比较熟悉的话,学习angularjs会比较容易一点,这篇文章给大家介绍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)

用法:

 {{  | currency}}  <!--将格式化为货币,默认单位符号为 '$', 小数默认位-->
 {{ . | currency:'¥'}} <!--将.格式化为货币,使用自定义单位符号为 '¥', 小数默认位-->
 {{ . | currency:'CHY¥':}} <!--将.格式化为货币,使用自定义单位符号为 'CHY¥', 小数指定位, 会执行四舍五入操作 -->
 {{ . | 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):

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

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

// 先在Controller中定义function: myFilter
 $scope.myFilter = function (item) {
   return item.age === ;
 };
 <div ng-repeat="u in myArr | filter:myFilter ">
   <p>Name:{{u.name}}</p>
   <p>Age:{{u.age}}</p>
   <br />
 </div>

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

<div ng-init="myArr = [{name:'Tom', age:}, {name:'Tom Senior', age:}, {name:'May', age:}, {name:'Jack', age:}, {name:'Alice', age:}]">
   <div ng-repeat="u in myArr | filter:{age: } ">
     <p>Name:{{u.name}}</p>
     <p>Age:{{u.age}}</p>
     <br />
   </div>
 </div>

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

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

用法5(指定comparator为function):

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

jsonFilter(json):

方法原型:

function(object, spacing)

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

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

limitToFilter(limitTo):

方法原型:

function(input, limit)

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

<div ng-init="myArr = [{name:'Tom', age:}, {name:'Tom Senior', age:}, {name:'May', age:}, {name:'Jack', age:}, {name:'Alice', age:}]">
   <div ng-repeat="u in myArr | limitTo:">
     <p>Name:{{u.name}}
     <p>Age:{{u.age}}
   </div>
 </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)

用法:

<div ng-init="myArr = [{name:'Tom', age:, deposit: }, {name:'Tom', age:, deposit: }, {name:'Tom Senior', age:, deposit: }, {name:'May', age:, deposit: }, {name:'Jack', age:, deposit:}, {name:'Alice', age:, deposit: }]">
   <!--deposit前面的'-'表示deposit这列倒叙排序,默认为顺序排序
   参数reverseOrder:true表示结果集倒叙显示-->
   <div ng-repeat="u in myArr | orderBy:['name','-deposit']:true">
     <p>Name:{{u.name}}</p>
     <p>Deposit:{{u.deposit}}</p>
     <p>Age:{{u.age}}</p>
     <br />
   </div>
 </div>

自定义Filter

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

方法原型:

function (input, capitalize_index, specified_char)

完整的示例代码:

<!DOCTYPE>
 <html>
 <head>
   <script src="/Scripts/angular.js"></script>
   <script type="text/javascript">
     (function () {
       var app = angular.module('ngCustomFilterTest', []);
       app.filter('capitalize_as_you_want', function () {
         return function (input, capitalize_index, specified_char) {
           input = input || '';
           var output = '';
           var customCapIndex = capitalize_index || -;
           var specifiedChar = specified_char || '';
           for (var i = ; i < input.length; i++) {
             // 首字母肯定是大写的, 指定的index的字母也大写
             if (i === || i === customCapIndex) {
               output += input[i].toUpperCase();
             }
             else {
               // 指定的字母也大写
               if (specified_char != '' && input[i] === specified_char) {
                 output += input[i].toUpperCase();
               }
               else {
                 output += input[i];
               }
             }
           }
           return output;
         };
       });
     })();
   </script>
 </head>
 <body ng-app="ngCustomFilterTest">
   <input ng-model="yourinput" type="text">
   <br />
   Result: {{ yourinput | capitalize_as_you_want::'b' }}
 </body>
 </html>

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

Javascript 相关文章推荐
动态载入/删除/更新外部 JavaScript/Css 文件的代码
Jul 03 Javascript
js工具方法弹出蒙版
May 08 Javascript
ExtJS4给Combobox设置列表中的默认值示例
May 02 Javascript
PHP+MySQL+jQuery随意拖动层并即时保存拖动位置实例讲解
Oct 09 Javascript
非常实用的12个jquery代码片段
Nov 02 Javascript
JS简单随机数生成方法
Sep 05 Javascript
BootStrap轮播HTML代码(推荐)
Dec 10 Javascript
JS实现利用两个队列表示一个栈的方法
Dec 13 Javascript
JavaScript静态作用域和动态作用域实例详解
Jun 17 Javascript
使用webpack将ES6转化ES5的实现方法
Oct 13 Javascript
Openlayers显示瓦片网格信息的方法
Sep 28 Javascript
vue组件的路由高亮问题解决方法
May 11 Vue.js
jquery实现倒计时功能
Dec 28 #Javascript
基于jquery实现瀑布流布局
Jun 28 #Javascript
详解AngularJS Filter(过滤器)用法
Dec 28 #Javascript
原生JavaScript实现瀑布流布局
Jun 28 #Javascript
js实现瀑布流的三种方式比较
Jun 28 #Javascript
详解AngularJS中自定义过滤器
Dec 28 #Javascript
js运动应用实例解析
Dec 28 #Javascript
You might like
实现dedecms全站URL静态化改造的代码
2007/03/29 PHP
php feof用来识别文件末尾字符的方法
2010/08/01 PHP
easyui的tabs update正确用法分享
2014/03/21 PHP
PHP微信支付开发实例
2016/06/22 PHP
thinkPHP5.0框架API优化后的友好性分析
2017/03/17 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
2017/09/16 PHP
网页开发中的容易忽略的问题 javascript HTML中的table
2009/04/15 Javascript
js拦截alert对话框另类应用
2013/01/16 Javascript
js 一个关于图片onload加载的事
2013/11/10 Javascript
jquery实现checkbox全选全不选的简单实例
2013/12/31 Javascript
通过复制Table生成word和excel的javascript代码
2014/01/20 Javascript
JavaScript学习笔记之Cookie对象
2015/01/22 Javascript
AngularJS中的API(接口)简单实现
2016/07/28 Javascript
JavaScript 详解预编译原理
2017/01/22 Javascript
vue2.0实现的tab标签切换效果(内容可自定义)示例
2019/02/11 Javascript
小程序rich-text组件如何改变内部img图片样式的方法
2019/05/22 Javascript
微信小程序class封装http代码实例
2019/08/24 Javascript
[36:29]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 LGD vs TNC
2018/04/02 DOTA
python脚本内运行linux命令的方法
2015/07/02 Python
python实现在控制台输入密码不显示的方法
2015/07/02 Python
在Python中如何传递任意数量的实参的示例代码
2019/03/21 Python
python爬虫中采集中遇到的问题整理
2020/11/27 Python
Autopep8的使用(python自动编排工具)
2021/03/02 Python
个人贷款承诺书
2014/03/28 职场文书
班长演讲稿范文
2014/04/24 职场文书
关于环保的活动方案
2014/08/25 职场文书
关于读书的演讲稿1000字
2014/08/27 职场文书
领导走群众路线整改措施思想汇报
2014/10/12 职场文书
感谢信模板大全
2015/01/23 职场文书
查看nginx配置文件路径和资源文件路径的方法
2021/03/31 Servers
浅谈Python类的单继承相关知识
2021/05/12 Python
mysql中数据库覆盖导入的几种方式总结
2022/03/25 MySQL
python微信智能AI机器人实现多种支付方式
2022/04/12 Python
Mybatis-Plus 使用 @TableField 自动填充日期
2022/04/26 Java/Android
MySQL索引失效十种场景与优化方案
2023/05/08 MySQL