详解AngularJS中的filter过滤器用法


Posted in Javascript onJanuary 04, 2016

系统的学习了一下angularjs,发现angularjs的有些思想根php的模块smarty很像,例如数据绑定,filter。如果对smarty比较熟悉的话,学习angularjs会比较容易一点。这篇简单说一下angularjs的filter功能,angularjs的filter功能可分为二种,一种是内置的过滤器,一种是自定义的。

一,内置的过滤器
1,uppercase,lowercase大小转换

{{ "lower cap string" | uppercase }}   //结果:LOWER CAP STRING 
{{ "TANK is GOOD" | lowercase }}     //结果:tank is good

 
|这里的竖线是一种管道功能,如果对linux比较熟悉的话,这块的|根linux的管道功能,基本是一样的
2,json格式化

{{ {foo: "bar", baz: 23} | json }}  //结果:{ "foo": "bar", "baz": 23 }

注意:bza没格式前是没有双引号的,格式化后就转换成了json数据了。
3,date格式化

{{ 1304375948024 | date }}             //结果:May 3, 2011 
{{ 1304375948024 | date:"MM/dd/yyyy @ h:mma" }}   //结果:05/03/2011 @ 6:39AM 
{{ 1304375948024 | date:"yyyy-MM-dd hh:mm:ss" }}  //结果:2011-05-03 06:39:08

4,number格式化

{{ 1.234567 | number:1 }}  //结果:1.2 
{{ 1234567 | number }}    //结果:1,234,567

5,currency货币格式化

{{ 250 | currency }}         //结果:$250.00 
{{ 250 | currency:"RMB ¥ " }}    //结果:RMB ¥ 250.00

6,filter查找

{{ [{"age": 20,"id": 10,"name": "iphone"}, 
{"age": 12,"id": 11,"name": "sunm xing"}, 
{"age": 44,"id": 12,"name": "test abc"} 
] | filter:'s'}}  //查找含有有s的行 
 
//上例结果:[{"age":12,"id":11,"name":"sunm xing"},{"age":44,"id":12,"name":"test abc"}] 
 
{{ [{"age": 20,"id": 10,"name": "iphone"}, 
{"age": 12,"id": 11,"name": "sunm xing"}, 
{"age": 44,"id": 12,"name": "test abc"} 
] | filter:{'name':'iphone'} }}  //查找name为iphone的行 
 
//上例结果:[{"age":20,"id":10,"name":"iphone"}]

7,limitTo字符串,对像的截取

{{ "i love tank" | limitTo:6 }}      //结果:i love 
{{ "i love tank" | limitTo:-4 }}     //结果:tank 
 
{{ [{"age": 20,"id": 10,"name": "iphone"}, 
{"age": 12,"id": 11,"name": "sunm xing"}, 
{"age": 44,"id": 12,"name": "test abc"} 
] | limitTo:1 }}   //结果:[{"age":20,"id":10,"name":"iphone"}]

8,orderBy对像排序

{{ [{"age": 20,"id": 10,"name": "iphone"}, 
{"age": 12,"id": 11,"name": "sunm xing"}, 
{"age": 44,"id": 12,"name": "test abc"} 
] | orderBy:'id':true }}    //根id降序排 
 
{{ [{"age": 20,"id": 10,"name": "iphone"}, 
{"age": 12,"id": 11,"name": "sunm xing"}, 
{"age": 44,"id": 12,"name": "test abc"} 
] | orderBy:'id' }}      //根据id升序排

二,自定filter功能
我找了一个基本angularjs的mvc框架,phonecat,自定义filter也是在这基础写的,这个框架挺好用的。
1,filters.js添加一个module

angular.module('tanktest', []).filter('tankreplace', function() { 
  return function(input) { 
    return input.replace(/tank/, "=====") 
  }; 
});

2,app.js中加载这个module

var phonecatApp = angular.module('phonecatApp', [ 
 'ngRoute', 
 'phonecatControllers', 
 'facebookControllers', 
 'tanktest' 
]);

3,html中调用

{{ "TANK is GOOD" | lowercase |tankreplace}}  //结果:===== is good

注意:| lowercase |tankreplace管道命令可以有多个

三、filter的两种使用方法

1. 在模板中使用filter

我们可以直接在{{}}中使用filter,跟在表达式后面用 | 分割,语法如下:

{{ expression | filter }}

也可以多个filter连用,上一个filter的输出将作为下一个filter的输入(怪不得这货长的跟管道一个样。。)

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

filter可以接收参数,参数用 : 进行分割,如下:

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

除了对{{}}中的数据进行格式化,我们还可以在指令中使用filter,例如先对数组array进行过滤处理,然后再循环输出:

<span ng-repeat="a in array | filter ">

  2. 在controller和service中使用filter

我们的js代码中也可以使用过滤器,方式就是我们熟悉的依赖注入,例如我要在controller中使用currency过滤器,只需将它注入到该controller中即可,代码如下:

app.controller('testC',function($scope,currencyFilter){
  $scope.num = currencyFilter(123534); 
}

在模板中使用{{num}}就可以直接输出$123,534.00了!在服务中使用filter也是同样的道理。

此时你可能会有疑惑,如果我要在controller中使用多个filter,难道要一个一个注入吗,这岂不太费劲了?小兄弟莫着急~ng提供了一个$filter服务可以来调用所需的filter,你只需注入一个$filter就够了,使用方法如下:

app.controller('testC',function($scope,$filter){
  $scope.num = $filter('currency')(123534);
$scope.date = $filter('date')(new Date()); 
}

可以达到同样的效果。好处是你可以方便使用不同的filter了。

Javascript 相关文章推荐
javascript分页代码(当前页码居中)
Sep 20 Javascript
一个字符串反转函数可实现字符串倒序
Sep 15 Javascript
使用JS获取当前地理位置方法汇总
Dec 18 Javascript
jQuery+CSS3实现树叶飘落特效
Feb 01 Javascript
JavaScript在网页中画圆的函数arc使用方法
Nov 13 Javascript
一不小心就做错的JS闭包面试题
Nov 25 Javascript
轻松实现Bootstrap图片轮播
Apr 20 Javascript
AngularJs 弹出模态框(model)
Apr 07 Javascript
如何使用bootstrap框架 bootstrap入门必看!
Apr 13 Javascript
JavaScrpt判断一个数是否是质数的实例代码
Jun 11 Javascript
vue 挂载路由到头部导航的方法
Nov 13 Javascript
vue2.0基于vue-cli+element-ui制作树形treeTable
Apr 30 Javascript
jQuery插件之jQuery.Form.js用法实例分析(附demo示例源码)
Jan 04 #Javascript
深入浅析AngularJS中的module(模块)
Jan 04 #Javascript
Javascript基于对象三大特性(封装性、继承性、多态性)
Jan 04 #Javascript
详解Bootstrap的aria-label和aria-labelledby应用
Jan 04 #Javascript
详解Bootstrap glyphicons字体图标
Jan 04 #Javascript
详解Bootstrap按钮
Jan 04 #Javascript
详解Bootstrap四种图片样式
Jan 04 #Javascript
You might like
世界上第一台立体声收音机
2021/03/01 无线电
教你IIS6的PHP最佳配置方法
2006/09/05 PHP
Yii2简单实现给表单添加验证码的方法
2016/07/18 PHP
Thinkphp 框架扩展之类库扩展操作详解
2020/04/23 PHP
Code:findPosX 和 findPosY
2006/12/20 Javascript
javascript的对话框详解与参数
2007/03/08 Javascript
深入认识javascript中的eval函数
2009/11/02 Javascript
javascript 获取表单file全路径
2009/12/31 Javascript
js事件冒泡实例分享(已测试)
2013/04/23 Javascript
JS获取当前网址、主机地址项目根路径
2013/11/19 Javascript
JS和css实现检测移动设备方向的变化并判断横竖屏幕
2015/05/25 Javascript
基于bootstrap3和jquery的分页插件
2015/07/31 Javascript
手机软键盘弹出时影响布局的解决方法
2016/12/15 Javascript
jQuery Form插件使用详解_动力节点Java学院整理
2017/07/17 jQuery
浅谈Angular 中何时取消订阅
2017/11/22 Javascript
vue、react等单页面项目应该这样子部署到服务器
2018/01/03 Javascript
详解性能更优越的小程序图片懒加载方式
2018/07/18 Javascript
js面试题之异步问题的深入理解
2020/09/20 Javascript
[03:34]2014DOTA2西雅图国际邀请赛 淘汰赛7月15日TOPPLAY
2014/07/15 DOTA
[02:39]我与DAC之Newbee.Moogy:从论坛到TI
2018/03/26 DOTA
django 常用orm操作详解
2017/09/13 Python
python thrift搭建服务端和客户端测试程序
2018/01/17 Python
对python中的argv和argc使用详解
2018/12/15 Python
在Django model中设置多个字段联合唯一约束的实例
2019/07/17 Python
Python 使用 PyQt5 开发的关机小工具分享
2020/07/16 Python
英国最大的在线快递公司之一:ParcelHero
2019/11/04 全球购物
俄罗斯最大的在线珠宝大卖场:Nebo
2019/12/08 全球购物
什么是虚拟内存?虚拟内存有什么优势?
2012/02/19 面试题
房屋继承公证书
2014/04/10 职场文书
父母对孩子说的话
2014/04/12 职场文书
政治表现评语
2014/05/04 职场文书
大学生工作自荐书
2014/06/16 职场文书
庆七一活动总结
2014/08/27 职场文书
个人授权委托书
2014/09/15 职场文书
教师个人自我剖析材料
2014/09/29 职场文书
CSS变量实现主题切换的方法
2021/06/23 HTML / CSS