• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Angularjs之filter过滤器(推荐)

angularjs 搞代码 4年前 (2021-12-31) 24次浏览 已收录 0个评论

这篇文章主要介绍了Angularjs之filter过滤器的相关资料,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

现在公司用ionic,就是基于angularjs封装了一些api用于webapp,最近用的angularjs的filter确实省了很多代码,现在总结一下!

  ng比较鸡肋的过滤器,这里就一笔带过吧!鸡汤类常用的filter后面上例子。

lowercase(小写)

 {{ lastName | lowercase }}

uppercase(大写)

 {{ lastName | uppercase }}

number(格式化数字)

number过滤器可以为一个数字加上千位分割,像这样,123,456,789。同时接收一个参数,可以指定小float型保留几位小数:

 {{ num | number : 2 }}

currency (货币处理)

 {{num | currency : '¥'}}

json(格式化json对象)

 {{ jsonTest | json}}

  作用就和我们熟悉的JSON.stringify()一样

limitTo(限制数组长度或字符串长度)

 {{ childrenArray | limitTo : 3 }} //将会显示数组中的前3项

filter(匹配子串)

  用来处理一个数组,然后可以过滤出含有某个子串的元素,作为一个子数组来返回。可以是字符串数组,也可以是对象数组。如果是对象数组,可以匹配属性的值。它接收一个参数,用来定义子串的匹配规则。

html

 <ul> <li>filter 匹配子串(以下写法只是方便观察)</li><li>{{ webA<em style="color:transparent">来源gao.dai.ma.com搞@代*码网</em>rr | filter : 'n' }} <!--匹配属性值中含有n的--></li><li>{{ webArr | filter : 25 }} <!--匹配属性值中含有25的--></li><li>{{ webArr | filter : {name : 'l'} }} <!--//参数是对象,匹配name属性中含有l的--></li><li>{{ webArr | filter : fun }} <!--/参数是函数,指定返回age>25的--></li></ul>

js

 $scope.webArr = [ {name:'nick',age:25}, {name:'ljy',age:28}, {name:'xzl',age:28}, {name:'zyh',age:30} ]; $scope.fun = function(e){return e.age>25;};

效果展示:

filter 匹配子串(以下写法只是方便观察)

 [{"name":"nick","age":25}] [{"name":"nick","age":25}] [{"name":"ljy","age":28},{"name":"xzl","age":28}] [{"name":"ljy","age":28},{"name":"xzl","age":28},{"name":"zyh","age":30}]

日期类

  日期过滤器应该是常用过滤器中最简单的吧!

yyyy–表示年份;
MM–月份(必须大写);
dd–日期;
hh–时;
mm–分(必须小写);
ss–秒;
EEEE–星期;
hh:mm–形式是24小时制;
h:mma–12小时制;

其中年、月、日、时、分、秒 或 / : – 等自己试做搭配吧!

 <ul> <li>8 日期1</li><li></li><li>8 日期2</li><li></li><li>8 日期3</li><li></li><li>8 日期4</li><li></li></ul>

日期1的显示

2016/11/19 11:59:05 Saturday

日期2的显示

2016年11月19日 12:01PM Saturday

日期3的显示

2016年11月22日 10时42分09秒

日期4的显示

2016/11/22 11:16:58

orderBy排序(个人认为第七例最佳写法)

ng-repeat生成一个独立的scope作用域,直接在ng-repeat循环后加管道orderBy排序。

用法很简单,但有坑需注意两点:

参数引号勿忘;

参数形式–直接写成age,不用写成item2.age。

3 按年龄排序(默认升序)

 <ul> <li>3 按年龄排序(默认升序)</li><li> <div> <b>name</b><u></u></div><div> <b>age</b><i></i></div><div> <b>stature</b><i></i></div></li></ul>

效果展示:

3 按年龄排序(默认升序)

 name ljy age 27 stature 165 name nick age 25 stature 170 name xzl age 27 stature 175 name zyh age 29 stature 165

4 按年龄排序(加参数true则为倒序即降序)

 <ul> <li> <div> <b>name</b><u></u></div><div> <b>age</b><i></i></div><div> <b>stature</b><i></i></div></li></ul>

效果展示:

4 按年龄排序(加参数true则为倒序即降序)

 name zyh age 29 stature 165 name xzl age 27 stature 175 name ljy age 27 stature 165 name nick age 25 stature 170

5 想先按年龄升序在按身高降序(全是降序了,达不到效果,见第7例)

我曾就天真的这样写过^*^

 <ul> <!--<li>--><li> <div> <b>name</b><u></u></div><div> <b>age</b><i></i></div><div> <b>stature</b><i></i></div></li></ul>

效果展示:

5 想先按年龄升序在按身高降序(全是降序了,达不到效果,见第7例)

 name zyh age 29 stature 165 name xzl age 27 stature 175 name ljy age 27 stature 165 name nick age 25 stature 170

6 先按年龄在按身高排序(多个参数写出数组形式)

 <ul> <li> <div> <b>name</b><u></u></div><div> <b>age</b><i></i></div><div> <b>stature</b><i></i></div></li></ul>

效果展示:

6 先按年龄在按身高排序(多个参数写出数组形式)

 name nick age 25 stature 170 name ljy age 27 stature 165 name xzl age 27 stature 175 name zyh age 29 stature 165

7 先按年龄升序在按身高降序(多个参数写出数组形式)

  在参数前加负号即可实现倒序

 <ul> <li> <div> <b>name</b><u></u></div><div> <b>age</b><i></i></div><div> <b>stature</b><i></i></div></li></ul>

效果展示:

!!7 先按年龄升序在按身高降序(多个参数写出数组形式)

 name nick age 25 stature 170 name xzl age 27 stature 175 name ljy age 27 stature 165 name zyh age 29 stature 165

个人觉得ng内置的过滤器好多都比较鸡肋。个性化的需求自定义的过滤器吧。

自定义过滤器

自定义过滤器就是返回一个函数,函数又返回你要的值即可!

实例:

 angular.module('youAppName',[]) .filter('youFilterName',function(){ return function(){ //你的处理代码 return result;//返回你要的值 } })

自定义一个求和的过滤器

html

 <ul> <li>!!1 求和</li><li> <div></div></li></ul>

用法:

管道前后所有参数即为和

js

 var nickAppModule=angular.module('nickApp',[]); nickAppModule //求和 .filter('sumNick',function(){ return function(){ var arr=Array.prototype.slice.call(arguments),sum=0; for(var i= 0,len=arr.length;i<len;i++){ sum+=arr[i]?arr[i]:0; } return sum; } })

arguments–函数接受的参数集合,类数组;

 Array.prototype.slice.call(arguments)

这句将类数组转为数组;

 sum+=arr[i]?arr[i]:0;

  总和sum等于数组的每个元素累加的和。避免后台为传值,而又将次参数传人自定义filer函数作为参数,容错时写成0保险。

  自定义一个求百分百的过滤器(求保留小数点后两位百分比)

html

 <ul> <li>!!2 求百分比</li><li> <b>male</b><i></i></li><li> <b>female</b><u></u></li><li> <b>gay</b><s></s></li></ul>

用法:

分子写在管道前面,管道后面的所有参数和加管道前的参数和则为分母

js

 var nickAppModule=angular.module('nickApp',[]); nickAppModule //百分比 .filter('percentNick',function(){ return function(){ var arr=Array.prototype.slice.call(arguments),sum=0; for(var i= 0,len=arr.length;i<len;i++){ sum+=arr[i]?arr[i]:0; } //0/0也是nan return sum==0?'0%':Math.round((arr[0]?arr[0]:0)/sum*10000)/100+"%"; } })

这里就是在上面求和的filter上多了一句:

 sum==0?'0%':Math.round((arr[0]?arr[0]:0)/sum*10000)/100+"%"

  Math内置函数,Math.round四舍五入保留整数;

  将总和乘以10000除以100拼接百分比号,即保留两位小数。

完整代码:

   <title>ng filter nick</title> <ul> <li>!!1 求和</li><li> <div></div></li></ul><ul> <li>!!2 求百分比</li><li> <b>male</b><i></i></li><li> <b>female</b><u></u></li><li> <b>gay</b><s></s></li></ul><ul> <li>3 按年龄排序(默认升序)</li><li> <div> <b>name</b><u></u></div><div> <b>age</b><i></i></div><div> <b>stature</b><i></i></div></li></ul><ul> <li>4 按年龄排序(加参数true则为倒序即降序)</li><li> <div> <b>name</b><u></u></div><div> <b>age</b><i></i></div><div> <b>stature</b><i></i></div></li></ul><ul> <li>5 想先按年龄升序在按身高降序(全是降序了,达不到效果,见第7例)</li><!--<li>--><li> <div> <b>name</b><u></u></div><div> <b>age</b><i></i></div><div> <b>stature</b><i></i></div></li></ul><ul> <li>6 先按年龄在按身高排序(多个参数写出数组形式)</li><li> <div> <b>name</b><u></u></div><div> <b>age</b><i></i></div><div> <b>stature</b><i></i></div></li></ul><ul> <li>!!7 先按年龄升序在按身高降序(多个参数写出数组形式)</li><li> <div> <b>name</b><u></u></div><div> <b>age</b><i></i></div><div> <b>stature</b><i></i></div></li></ul><ul> <li>8 日期1</li><li></li><li>2016/11/19 11:59:05 Saturday</li><li>8 日期2</li><li></li><li>2016年11月19日 12:01PM Saturday</li><li>8 日期3</li><li></li><li>2016年11月22日 10时42分09秒</li><li>8 日期4</li><li></li><li>2016/11/22 11:16:58</li></ul><div>{{100000|currency:'¥'}}<!--¥可以写成$或其他--></div><ul> <li>filter 匹配子串(以下写法只是方便观察)</li><li>{{ webArr | filter : 'n' }} <!--匹配属性值中含有n的--></li><li>{{ webArr | filter : 25 }} <!--匹配属性值中含有25的--></li><li>{{ webArr | filter : {name : 'l'} }} <!--//参数是对象,匹配name属性中含有l的--></li><li>{{ webArr | filter : fun }} <!--/参数是函数,指定返回age>25的--></li></ul>

以上就是Angularjs之filter过滤器(推荐)的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Angularjs之filter过滤器(推荐)

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址