AngularJS过滤器filter⽤法总结
本⽂实例总结了AngularJS过滤器filter⽤法。分享给⼤家供⼤家参考,具体如下:
引⾔
filter过滤器对于我们来说并不陌⽣,他和我们现实⽣活中的过滤器的意思差不多,它的作⽤就是接收⼀个输⼊的值,然后按照某个规则进⾏处理然后输出最后的结果,例如我们输⼊⼀个数字,然后我们需要得到货币形式的数据,这样我们就可以利⽤过滤器来实现,AngularJS中的过滤器是⾮常简单的,分为内置和⾃定义两种,下⾯⼩编就简单的给⼤家介绍⼀些。
内置过滤器
ng内置了⼀些过滤器,它们是:currency(货币)、date(⽇期)、filter(⼦串匹配)、json(格式化json对象)、limitTo(限制个数)、lowercase(⼩写)、uppercase(⼤写)、number(数字)、orderBy(排序)。总共九种。除此之外还可以⾃定义过滤器,这个就强⼤了,可以满⾜任何要求的数据处理。下⾯来看⼀下他们的使⽤⽅法;
1. currency (货币处理)
使⽤currency可以将数字格式化为货币,默认是美元符号,你可以⾃⼰传⼊所需的符号,例如我传⼊⼈民币:
{{num | currency : '¥'}}
2. date (⽇期格式化)
原⽣的js对⽇期的格式化能⼒有限,ng提供的date过滤器基本可以满⾜⼀般的格式化要求。⽤法如下:
{{date | date : 'yyyy-MM-dd hh:mm:ss EEEE'}}
参数⽤来指定所要的格式,y M d h m s E 分别表⽰年⽉⽇时分秒星期,你可以⾃由组合它们。也可以使⽤不同的个数来限制格式化的位数。另外参数也可以使⽤特定的描述性字符串,例如“shortTime”将会把时间格式为12:05 pm这样的。ng提供了⼋种描述性的字符串,个⼈觉得这些有点多余,我完全可以根据⾃⼰的意愿组合出想要的格式,不愿意去记这么多单词~
3. filter(匹配⼦串)
这个名叫filter的filter(不得不说这名字起的,真让⼈容易混淆——!)⽤来处理⼀个数组,然后可以过滤出含有某个⼦串的元素,作为⼀个⼦数组来返回。可以是字符串数组,也可以是对象数组。如果是对
象数组,可以匹配属性的值。它接收⼀个参数,⽤来定义⼦串的匹配规则。下⾯举个例⼦说明⼀下参数的⽤法,我⽤现在特别⽕的⼏个孩⼦定义了⼀个数组:
$scope.childrenArray = [
{name:'kimi',age:3},
{name:'cindy',age:4},
{name:'anglar',age:4},
{name:'shitou',age:6},
{name:'tiantian',age:5}
];
$scope.func = function(e){return e.age>4;}
{{ childrenArray | filter : 'a' }} //匹配属性值中含有a的
{{ childrenArray | filter : 4 }} //匹配属性值中含有4的
{{ childrenArray | filter : {name : 'i'} }} //参数是对象,匹配name属性中含有i的
{{childrenArray | filter : func }} //参数是函数,指定返回age>4的
4. json(格式化json对象)
json过滤器可以把⼀个js对象格式化为json字符串,没有参数。这东西有什么⽤呢,我⼀般也不会在页⾯上输出⼀个json串啊,官⽹说它可以⽤来进⾏调试,嗯,是个不错的选择。或者,也可以⽤在js中使⽤,作⽤就和我们熟悉的JSON.stringify()⼀样。⽤法超级简单:
{{ jsonTest | json}}
5. limitTo(限制数组长度或字符串长度)
limitTo过滤器⽤来截取数组或字符串,接收⼀个参数⽤来指定截取的长度,如果参数是负值,则从数组尾部开始截取。个⼈觉得这个filter有点鸡肋,⾸先只能从数组或字符串的开头/尾部进⾏截取,其次,js原⽣的函数就可以代替它了,看看怎么⽤吧:{{ childrenArray | limitTo : 2 }} //将会显⽰数组中的前两项
6. lowercase(⼩写)
把数据转化为全部⼩写。太简单了,不多解释。同样是很鸡肋的⼀个filter,没有参数,只能把整个字符串变为⼩写,不能指定字母。怎么⽤我都懒得写了。
7. uppercase(⼤写)
同上。
8. number(格式化数字)
number过滤器可以为⼀个数字加上千位分割,像这样,123,456,789。同时接收⼀个参数,可以指定float类型保留⼏位⼩数:{{ num | number : 2 }}
9. orderBy(排序)
orderBy过滤器可以将⼀个数组中的元素进⾏排序,接收⼀个参数来指定排序规则,参数可以是⼀个字符串,表⽰以该属性名称进⾏排序。可以是⼀个函数,定义排序属性。还可以是⼀个数组,表⽰依次按数组中的属性值进⾏排序(若按第⼀项⽐较的值相等,再按第⼆项⽐较),还是拿上⾯的孩⼦数组举例:
<div>{{ childrenArray | orderBy : 'age' }}</div>  //按age属性值进⾏排序,若是-age,则倒序
<div>{{ childrenArray | orderBy : orderFunc }}</div>  //按照函数的返回值进⾏排序
<div>{{ childrenArray | orderBy : ['age','name'] }}</div> //如果age相同,按照name进⾏排序
内置的过滤器介绍完了,写的我都快睡着了。。。正如你所看到的,ng内置的过滤器也并不是万能的,事实上好多都⽐较鸡肋。更个性化的需求就需要我们来定义⾃⼰的过滤器了。
⾃定义过滤器
我们需要借助于module中的filter来定义⼀个函数,这个函数接收输⼊值,然后经过⼀系列的处理返回我们想要的结果,⽐如下⾯⼀个例⼦,实现返回数组中下标为奇数的值。
字符串转数组怎么处理
app.filter('odditems',function(){
return function(inputArray){
var array = [];
for(var i=0;i<inputArray.length;i++){
if(i%2!==0){
array.push(inputArray[i]);
}
}
return array;
}
});
格式就是这样,你的处理逻辑就写在内部的那个闭包函数中。你也可以让⾃⼰的过滤器接收参数,参数就定义在return的那个函数中,作为第⼆个参数,或者更多个参数也可以。
过滤器的两种⽤法
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中即可,代码如下:
$scope.num = currencyFilter(123534);
}
在模板中使⽤{{num}}就可以直接输出$123,534.00了!在服务中使⽤filter也是同样的道理。
此时你可能会有疑惑,如果我要在controller中使⽤多个filter,难道要⼀个⼀个注⼊吗,这岂不太费劲了?⼩兄弟莫着急~ng提供了⼀个$filter服务可以来调⽤所需的filter,你只需注⼊⼀个$filter就够了,使⽤⽅法如下:
$scope.num = $filter('currency')(123534);
$scope.date = $filter('date')(new Date(),"yyyy-MM-dd hh:mm:ss EEEE");
}
可以达到同样的效果。好处是你可以⽅便使⽤不同的filter了。
⼩结
以上是关于angularJS中过滤器的⼀些基本⽤法,都⾮常的简单,⼩编在这整理⼀下会印象深刻⼀些,filter的学习没有什么难的地⽅,到时候我们可以直接查询相关的⽂档就可以了。
更多关于AngularJS相关内容感兴趣的读者可查看本站专题:《》及《》
希望本⽂所述对⼤家AngularJS程序设计有所帮助。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。