通过过滤器可以实现很多数据格式化的功能

常用方法形如{{ data | uppercase}} 或者是{{ 123.456 | number:2 }}

也可以通过在控制器中注入$filter来实现功能

angular.module('MyApp',[])
.controller('FilterController',function($scope,$filter){
$scope.data = $filter('uppercase')('ard');
});

1.currency 货币单位

{{ 123456.789 | currency }}        $123,456.79 
{{ 123456.789 | currency:'¥' }}       ¥123,456.79 
{{ 123456.789 | currency:'¥':2 }}    ¥123,456.79
{{ 123456.789 | currency:'¥':0 }}    ¥123,457
 

2.date 日期格式化

2.1.日期的格式化

{{ today | date}}              May 3, 2018 
{{ today | date:'medium' }}        May 3, 2018 10:05:21 PM 
{{ today | date:'short' }}        5/3/18 10:05 PM 
{{ today | date:'fullDate' }}         Thursday, May 3, 2018
{{ today | date:'longDate' }}       May 3, 2018
{{ today | date:'mediumDate'}}       May 3, 2018
{{ today | date:'shortDate'}}       5/3/18
{{ today | date:'mediumTime'}}       10:05:21 PM 
{{ today | date:'shortTime'}}       10:05 PM 
 

2.2.年份的格式化

{{ today | date:'yyyy'}}       2018       
{{ today | date:'y'}}          2018
{{ today | date:'yy'}}           18

2.3.月份格式化

{{ today | date:'MMMM'}}       August       
{{ today | date:'MMM'}}          Aug
{{ today | date:'MM'}}        08
{{ today | date:'M'}}              8

2.4.日期格式化

{{ today | date:'EEEE'}}        Thursday      
{{ today | date:'EEE'}}          Thu
{{ today | date:'dd'}}        08
{{ today | date:'d'}}             8

2.5.小时格式化

{{ today | date:'HH' }}           24小时制数字小时:
{{ today | date:'H' }}         一天中的第几个小时:
{{ today | date:'hh' }}         12小时制数字小时:
{{ today | date:'h' }}         上午或下午的第几个小时:

2.6.分钟格式化

{{ today | date:'mm' }}           09
{{ today | date:'m' }}         9

2.7.秒数格式化

{{ today | date:'ss' }}         02
{{ today | date:'s' }}           2
{{ today | date:'.sss' }}         .995

2.8.字符格式化

{{ today | date:'a' }}           AM
{{ today | date:'Z' }}           0800   时区标识

2.8.自定义的组合格式化

{{ today | date:'MMMd, y' }}      Aug9, 2013
{{ today | date:'EEEE, d, M' }}     Thursday, 9, 8
{{ today | date:'hh:mm:ss.sss' }}    12:09:02.995

3.从数组中筛选符合条件的结果

3.1.数组中对象为简单对象(纯数字或字符串)

3.1.1.过滤条件为简单字符串 {{ data | filter:'abc' }}

只要存在filter中过滤条件的字符串都能被返回

$scope.data = ['abc','abcde','hahaha']   

输出的结果为 ['abc','abcde']   

如果想要排除某种字符串 则使用 {{ data | filter:'!abc'}}

3.2.数组中对象为复杂对象

3.2.1.过滤条件为简单字符串 {{ data | filter:'abc' }}

只有某个对象的的键值对中的值符合条件才会被输出。

$scope.data= [{"name":"alex","age":16},{"name":"keji","age":16},{"age":22,"gender":"man"}];

3.2.2.过滤条件为对象 {{ data | filter:{'name':'alex'} }}

只有对象中包含该键,且键的值等于过滤条件的才会被输出。

$scope.data = [{'name':'alex','age':'18'},{'name':'peter','age':'19'},{'name':'keke','gender':'woman'}];       输出结果为[{"name":"alex","age":"18"}]

如果不需要指定data中是哪个键的属性中包含指定的属性,那么可以用

{{ data | filter:{'$':'alex'} }} 这种写法,此时就是类似将对象转为字符串,如果值中包含指定的字符串,则输出该对象,类似与上面直接用一个字符串作为条件来过滤。

3.3.自定义函数实现过滤逻辑校验

3.3.1.{{ data | filter:isCapitalized }}

通过自定义函数isCapitalized 中需要过滤的数据进行逐个筛选,如果满足条件,函数返回true

var app = angular.module('myApp',[]);
app.controller('MyCtrl',function($scope){
$scope.data = [{'name':'alex','age':'18'},{'name':'peter','age':'19'},{'name':'keke','gender':'woman'}];
$scope.dataTwo = ['Alex','peter','json'];
$scope.isCapitalized = function(obj){
return obj.name == 'alex';
}
});

3.3.2.自定义filter(可以看作上面自定义函数的另一种写法)

var app = angular.module('myApp',[]);
app.filter('myReverse',function(){
return function(text){
return text.split("").reverse().join("");
}
})

3.4.使用filter时候的第二个参数

3.4.1.TRUE  {{ data | filter:'xxx':true}}

此时的过滤条件为全等,只有data中的数据与过滤条件完全一致(大小写,类型等),才能被输出。

3.4.2.FALSE  {{ data | filter:'xxx':false}}

此时的过滤条件为非全等,只有data中的数据与过滤条件字面值一致(忽略大小写,类型等),就能被输出。

3.4.3.JSON  {{ data | filter:'xxx':json}}

此时会将结果以json的格式输出

3.5.limitTo {{ data | limitTo:n }}

n为正值,从前往后截取。n为负值,从后往前截取。

若data为简单对象,返回的也是同种类型对象。

若data为对象数组,返回的也是数组。

若n大于data的长度,返回整个对象。

3.6.uppercase {{ data | uppercase }}

将字符串转为大写

3.7.lowercase {{ data | lowercase }}

将字符串转为小写

3.8.number {{ data | number:x}}

将数字添加千分符,默认x=3,即保留小数点后三位,进行四舍五入。

{{ 1234567.78935 | number:4 }}   输出  1,234,567.7894

3.9. orderBy {{ data | orderBy:fun:true}} (fun为必填,第二个参数默认false)

3.9.1.fun为函数

此时需要自定义一个函数来实现入参的处理

若定义函数为

$scope.sortSimpleType(op){

     return op;
}
 
入参为简单的字符串数组 
{{ data | orderBy:sortSimpleType }}
 
$scope.data = " ['test','bob','market','type','barrow'] "
 
输出为 
 
["barrow","bob","market","test","type"]
 
若$scope.data = "[1,3434,2,1,12121,6,56,3] "
 
输出为
 
[1,1,2,3,6,56,3434,12121]
 
若入参为对象组成的数组,则只需要在自定义函数中返回元素的属性
$scope.sortObjectType = function(obj){
   return obj['name']
}
 
{{[{'name':'nick','age':'34'},{'name':'bob','age':'23'}]] | orderBy: sortObjectType}}
 
结果为
 
[{"name":"bob","age":"23"},{"name":"nick","age":"34"}]

3.9.2.fun为字符

如果是字符串,假如待排序的数组为对象,那么将会按照待排序数组中的每个对象的对应属性值,进行排序。如果字符串前边加有“+”,“-”符号,那么+表示升序排序,-表示降序排序。如果字符串为空,那么将按照元素自身进行排序。

对于元素是对象的数组按照某一个属性来排序,此时只需要指定字符为属性名就行,相比于上面需要自定义一个函数更便捷。

{{[{'name':'nick','age':'34'},{'name':'bob','age':'23'}]] | orderBy: 'name'}}

输出结果

[{"name":"bob","age":"23"},{"name":"nick","age":"34"}].

3.9.3.fun为数组

如果是array,那么是第二种情况的一种多属性排序方式 。比如参数为[a,b],那么将先按照a属性值进行排序,如果a属性值相同,那么将按照b属性值进行排序。

{{[{'name':'nick','age':34},{'name':'nick','age':23},{'name':'bob','age':23}]] | orderBy:[ 'name','age']}}

输出结果

[{"name":"bob","age":23},{"name":"nick","age":23},{"name":"nick","age":34}]

Angular JS 中的内置方法之filter的更多相关文章

  1. Angular JS 中的内置方法之$watch

    在$apply方法中存在脏检查,首先apply方法会触发evel方法,当evel方法解析成功后,会去触发digest方法,digest方法会触发watch方法. $watch(watchFn,watc ...

  2. Angular JS 中的内置方法之表单验证

    angular js 结合html5 可以实现强大的表单验证功能 关闭html5自带的表单验证功能可以用

  3. js中数组内置方法

    var arr = ['A','B','C','D']; length 计算数组的长度 arr.length//4 indexOf() 搜索一个指定的元素的位置 arr.indexOf('C');// ...

  4. js中的内置方法的兼容写法

    1.如果浏览器不支持every属性,every的实现原理 if(Array.prototype.every===undefined){ Array.prototype.every=function(f ...

  5. JS中的内置对象简介与简单的属性方法

    JS中的数组: 1.数组的概念: 数组是在内存中连续存储的多个有序元素的结构,元素的顺序称为下标,通过下标查找对应元素 2.数组的声明: ①通过字面量声明var arr1 = [,,,,] JS中同一 ...

  6. Angular JS 中的服务注册方法

    在Angular JS中创建服务的几种方法 factory() service() constant() value() provider() factory(name,fn(){}) 该服务为单例的 ...

  7. Python中class内置方法__init__与__new__作用与区别探究

    背景 最近尝试了解Django中ORM实现的原理,发现其用到了metaclass(元类)这一技术,进一步又涉及到Python class中有两个特殊内置方法__init__与__new__,决定先尝试 ...

  8. python中字符串内置方法

    字符串类型 作用:定义姓名.性别等 定义方式: s='lzs' #\n换行 \t缩进4个空格 \r回退上一个打印结果,覆盖上一个打印结果 加上一个\让后面的\变得无意义 内置方法: (优先掌握) 1. ...

  9. js中的内置对象(还没怎么看)

         在js里,一切皆为或者皆可以被用作对象.可通过new一个对象或者直接以字面量形式创建变量(如var i="aaa"),所有变量都有对象的性质.注意:通过字面量创建的对象在 ...

随机推荐

  1. 【转】Linux下添加FTP账号和服务器、增加密码和用户,更改FTP目录

    转自:http://blog.csdn.net/cloudday/article/details/8640234   1. 启动VSFTP服务器 A:cenos下运行:yum  install  vs ...

  2. Python调试器-pdb的使用

    [简介] pdb是python自带的一个包,为python程序提供了一种交互的源代码调试功能. [使用方法] 1. 使用命令: python -m pdb xxx.py #可以直接进入单步执行模式 2 ...

  3. Scala 学习之路(八)—— 类和对象

    一.初识类和对象 Scala的类与Java的类具有非常多的相似性,示例如下: // 1. 在scala中,类不需要用public声明,所有的类都具有公共的可见性 class Person { // 2 ...

  4. Storm 学习之路(四)—— Storm集群环境搭建

    一.集群规划 这里搭建一个3节点的Storm集群:三台主机上均部署Supervisor和LogViewer服务.同时为了保证高可用,除了在hadoop001上部署主Nimbus服务外,还在hadoop ...

  5. spring 5.x 系列第4篇 —— spring AOP (代码配置方式)

    文章目录 一.说明 1.1 项目结构说明 1.2 依赖说明 二.spring aop 2.1 创建待切入接口及其实现类 2.2 创建自定义切面类 2.3 配置切面 2.4 测试切面 2.5 切面执行顺 ...

  6. python算法与数据结构-栈(43)

    一.栈的介绍 栈作为一种数据结构,是一种只能在一端进行插入和删除操作.它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读 ...

  7. java - Builder模式实例化对象

    Builder 优雅的链式调用来实现实例化对象 1.  首先在实体类中,构造一个Builder内部类,由Builder来完成Person的属性赋值,并最终执行build来完成Person的实例化 pa ...

  8. kubernetes实战篇之helm填坑与基本命令

    系列目录 其实前面安装部分我们已经分享一些互联网上其它网友分享的一些坑,本篇介绍helm的基本使用以及在使用过程中碰到的一些坑. 客户端版本和服务端版本不一致问题 有些朋友可能在使用helm init ...

  9. 2019年6月份,阿里最新Java高频面试真题汇总,仅供参考(附福利)

    目录 技术一面(23问) 技术二面(3大块) JAVA开发技术面试中可能问到的问题(17问) JAVA方向技术考察点(33快) 项目实战(7大块) 必会知识(48点) 面试小技巧 注意事项 1. 阿里 ...

  10. Java中的关键字synchronized

    1. 介绍 在Java并发系列的文章中,这个是第二篇文章.在前面的一篇文章中,我们学习了Java中的Executor池和Excutors的各种类别. 在这篇文章中,我们会学习synchronized关 ...