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>{{ 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>
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 ng-bind="date|date:'yyyy/MM/dd hh:mm:ss EEEE'"></li>
<li>8 日期2</li>
<li ng-bind="date|date:'yyyy年MM月dd日 h:mma EEEE'"></li>
<li>8 日期3</li>
<li ng-bind="date|date:'yyyy年MM月dd日 hh时mm分ss秒'"></li>
<li>8 日期4</li>
<li ng-bind="date|date:'yyyy/MM/dd hh:mm:ss'"></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 ng-repeat="item2 in items2|orderBy:'age'">
<div>
<b>name</b>
<u ng-bind="item2.name"></u>
</div>
<div>
<b>age</b>
<i ng-bind="item2.age"></i>
</div>
<div>
<b>stature</b>
<i ng-bind="item2.stature"></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 ng-repeat="item2 in items2|orderBy:'age':true">
<div>
<b>name</b>
<u ng-bind="item2.name"></u>
</div>
<div>
<b>age</b>
<i ng-bind="item2.age"></i>
</div>
<div>
<b>stature</b>
<i ng-bind="item2.stature"></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 ng-repeat="item2 in items2|orderBy:'age':'-stature'">-->
<li ng-repeat="item2 in items2|orderBy:'age':'stature':true">
<div>
<b>name</b>
<u ng-bind="item2.name"></u>
</div>
<div>
<b>age</b>
<i ng-bind="item2.age"></i>
</div>
<div>
<b>stature</b>
<i ng-bind="item2.stature"></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 ng-repeat="item2 in items2|orderBy:['age','stature']">
<div>
<b>name</b>
<u ng-bind="item2.name"></u>
</div>
<div>
<b>age</b>
<i ng-bind="item2.age"></i>
</div>
<div>
<b>stature</b>
<i ng-bind="item2.stature"></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 ng-repeat="item2 in items2|orderBy:['age','-stature']">
<div>
<b>name</b>
<u ng-bind="item2.name"></u>
</div>
<div>
<b>age</b>
<i ng-bind="item2.age"></i>
</div>
<div>
<b>stature</b>
<i ng-bind="item2.stature"></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 ng-repeat="item1 in items1">
<div ng-bind="item1.male | sumNick:item1.female:item1.gay"></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 ng-repeat="item1 in items1">
<li>!!2 求百分比</li>
<li>
<b>male</b>
<i ng-bind="item1.male|percentNick:item1.female:item1.gay"></i>
</li>
<li>
<b>female</b>
<u ng-bind="item1.female|percentNick:item1.male:item1.gay"></u>
</li>
<li>
<b>gay</b>
<s ng-bind="item1.gay|percentNick:item1.female:item1.male"></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拼接百分比号,即保留两位小数。
完整代码:
<!DOCTYPE html>
<html lang="zh-CN" ng-app="nickApp">
<head>
<meta charset="UTF-8">
<title>ng filter nick</title>
</head>
<body ng-controller="nickCtrl">
<ul>
<li>!!1 求和</li>
<li ng-repeat="item1 in items1">
<div ng-bind="item1.male | sumNick:item1.female:item1.gay"></div>
</li>
</ul>
<ul ng-repeat="item1 in items1">
<li>!!2 求百分比</li>
<li>
<b>male</b>
<i ng-bind="item1.male|percentNick:item1.female:item1.gay"></i>
</li>
<li>
<b>female</b>
<u ng-bind="item1.female|percentNick:item1.male:item1.gay"></u>
</li>
<li>
<b>gay</b>
<s ng-bind="item1.gay|percentNick:item1.female:item1.male"></s>
</li>
</ul>
<ul>
<li>3 按年龄排序(默认升序)</li>
<li ng-repeat="item2 in items2|orderBy:'age'">
<div>
<b>name</b>
<u ng-bind="item2.name"></u>
</div>
<div>
<b>age</b>
<i ng-bind="item2.age"></i>
</div>
<div>
<b>stature</b>
<i ng-bind="item2.stature"></i>
</div>
</li>
</ul>
<ul>
<li>4 按年龄排序(加参数true则为倒序即降序)</li>
<li ng-repeat="item2 in items2|orderBy:'age':true">
<div>
<b>name</b>
<u ng-bind="item2.name"></u>
</div>
<div>
<b>age</b>
<i ng-bind="item2.age"></i>
</div>
<div>
<b>stature</b>
<i ng-bind="item2.stature"></i>
</div>
</li>
</ul>
<ul>
<li>5 想先按年龄升序在按身高降序(全是降序了,达不到效果,见第7例)</li>
<!--<li ng-repeat="item2 in items2|orderBy:'age':'-stature'">-->
<li ng-repeat="item2 in items2|orderBy:'age':'stature':true">
<div>
<b>name</b>
<u ng-bind="item2.name"></u>
</div>
<div>
<b>age</b>
<i ng-bind="item2.age"></i>
</div>
<div>
<b>stature</b>
<i ng-bind="item2.stature"></i>
</div>
</li>
</ul>
<ul>
<li>6 先按年龄在按身高排序(多个参数写出数组形式)</li>
<li ng-repeat="item2 in items2|orderBy:['age','stature']">
<div>
<b>name</b>
<u ng-bind="item2.name"></u>
</div>
<div>
<b>age</b>
<i ng-bind="item2.age"></i>
</div>
<div>
<b>stature</b>
<i ng-bind="item2.stature"></i>
</div>
</li>
</ul>
<ul>
<li>!!7 先按年龄升序在按身高降序(多个参数写出数组形式)</li>
<li ng-repeat="item2 in items2|orderBy:['age','-stature']">
<div>
<b>name</b>
<u ng-bind="item2.name"></u>
</div>
<div>
<b>age</b>
<i ng-bind="item2.age"></i>
</div>
<div>
<b>stature</b>
<i ng-bind="item2.stature"></i>
</div>
</li>
</ul>
<ul>
<li>8 日期1</li>
<li ng-bind="date|date:'yyyy/MM/dd hh:mm:ss EEEE'"></li>
<li>2016/11/19 11:59:05 Saturday</li>
<li>8 日期2</li>
<li ng-bind="date|date:'yyyy年MM月dd日 h:mma EEEE'"></li>
<li>2016年11月19日 12:01PM Saturday</li>
<li>8 日期3</li>
<li ng-bind="date|date:'yyyy年MM月dd日 hh时mm分ss秒'"></li>
<li>2016年11月22日 10时42分09秒</li>
<li>8 日期4</li>
<li ng-bind="date|date:'yyyy/MM/dd hh:mm:ss'"></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>
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
<script>
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;
}
})
//百分比
.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+"%";
}
})
</script>
<script>
nickAppModule
.controller('nickCtrl',['$scope',function($scope){
$scope.items1=[{
male:66,
female:23,
gay:5,
other:'xxx',
msg:'xxx'
},
{
male:16,
female:8,
gay:7,
other:'xxx',
msg:'xxx'
}];
$scope.items2=[
{
name:'ljy',
age:27,
stature:165
},
{
name:'nick',
age:25,
stature:170
},
{
name:'xzl',
age:27,
stature:175
},
{
name:'zyh',
age:29,
stature:165
}];
$scope.date=new Date();
$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;};
}]) </script>
</body>
</html>
个人能力有限,浅显的总结了下ng filter,若有偏差,望大神指正!
angularjs之filter过滤器的更多相关文章
- 【angularJS】Filter 过滤器
当从后台获取到的数据呈现到视图上时,此时可能需要对数据进行相应的转换,此时我们可以通过过滤器在不同页面进行不同数据的格式抓换,在AngularJS中有常见默认的过滤器,当然若不满足所需,我们可以自定义 ...
- 详解AngularJS中的filter过滤器用法
系统的学习了一下angularjs,发现angularjs的有些思想根php的模块smarty很像,例如数据绑定,filter.如果对smarty比较熟悉的话,学习angularjs会比较容易一点.这 ...
- 转载 angularJS filter 过滤器
angularjs中的filter(过滤器) 标签: angularjsfilter 源文地址:http://www.ncloud.hk/技术分享/angularjs中的filter-过滤器/ f ...
- angularjs学习第三天笔记(过滤器第二篇---filter过滤器及其自定义过滤器)
您好,我是一名后端开发工程师,由于工作需要,现在系统的从0开始学习前端js框架之angular,每天把学习的一些心得分享出来,如果有什么说的不对的地方,请多多指正,多多包涵我这个前端菜鸟,欢迎大家的点 ...
- 前端MVC学习总结——AngularJS验证、过滤器
前端MVC学习总结--AngularJS验证.过滤器 目录 一.验证 二.过滤器 2.1.内置过滤器 2.1.1.在模板中使用过滤器 2.1.2.在脚本中调用过滤函数 2.2.自定义过滤器 三.指令( ...
- filter 过滤器(监听)
Filter 过滤器 1.简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, ...
- Java防止SQL注入2(通过filter过滤器功能进行拦截)
首先说明一点,这个过滤器拦截其实是不靠谱的,比如说我的一篇文章是介绍sql注入的,或者评论的内容是有关sql的,那会过滤掉:且如果每个页面都经过这个过滤器,那么效率也是非常低的. 如果是要SQL注入拦 ...
- Filter(过滤器)学习
一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态 ...
- angularjs自带过滤器
filter: filter过滤器第一个参数若是对象: <ul> <li ng-repeat="friend in friends | filter:{'name':'Jo ...
随机推荐
- 加深一下BlockingQueue的认识
认识BlockingQueue BlockingQueue是一种可以阻塞线程的队列,java中对这种队列提供了方法抽象,BlockingQueue则是抽象的接口. add:添加元素到队列里,添加成功返 ...
- XStream将java对象转换为xml时,对象字段中的下划线“_”,转换后变成了两个的解决办法
在前几天的一个项目中,由于数据库字段的命名原因 其中有两项:一项叫做"市场价格"一项叫做"商店价格" 为了便于区分,遂分别将其命名为market ...
- MSDN文档篇
很多人网上下载3~10G不等的MSDN文档,发现,下载完成了不会用 很多人每次都得在线下载文档,手上万千PC,都重新下载不是得疯了? so==> 先看几张图 推荐一个工具:https://vsh ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-Excel导入和导出-自定义表模导入
系列目录 前言 上一节使用了LinqToExcel和CloseXML对Excel表进行导入和导出的简单操作,大家可以跳转到上一节查看: ASP.NET MVC5+EF6+EasyUI 后台管理系统(6 ...
- 关于 devbridge-autocomplete 插件多选操作的实现方法
目前据我所知最好用的 autocomplete 插件就是 jquery-ui 的 autocomplete 以及 devbridge 的 autocomplete 插件. 我最终选择了 devbrid ...
- python 数据类型 -- 元组
元组其实是一种只读列表, 不能增,改, 只可以查询 对于不可变的信息将使用元组:例如数据连接配置 元组的两个方法: index, count >>> r = (1,1,2,3) &g ...
- Mysql基础代码(不断完善中)
Mysql基础代码,不断完善中~ /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限 ...
- CSS中强悍的相对单位之em(em-and-elastic-layouts)学习小记
使用相对单位em注意点 1.浏览器默认字体是16px,即1em = 16px,根元素设置如下 html{ font-size: 100%; /* WinIE text resize correctio ...
- 小程序用户反馈 - HotApp小程序统计仿微信聊天用户反馈组件,开源
用户反馈是小程序开发必要的一个功能,但是和自己核心业务没关系,主要是产品运营方便收集用户的对产品的反馈.HotApp推出了用户反馈的组件,方便大家直接集成使用 源码下载地址: https://gith ...
- Microsoft Visual Studio 2015 下载、注册、安装过程、功能列表、问题解决
PS:请看看回复.可能会有文章里没有提到的问题.也许会对你有帮助哦~ 先上一张最终的截图吧: VS2015正式版出了,虽然没有Ultimate旗舰版,不过也是好激动的说.哈哈.可能有的小伙伴,由于工作 ...