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>

以上所述是小编给大家介绍的Angularjs之filter过滤器,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的,在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Angularjs中如何使用filterFilter函数过滤

    AngularJS的filter,中文名"过滤器"是用来过滤变量的值,或者格式化输出,得到自己所期望的结果或格式的东东.AngularJS中有一个filterFilter函数用来对集合过滤,非常方便. 源代码大致如下: function filterFilter(){ return function(aray, expression comparator){ if(!isArray(array)) return array; var comparatorType = typeof(co

  • AngularJS中的过滤器filter用法完全解析

    在AngularJS的世界里,filter提供了一种格式化数据的方法,Angular也提供给我们了很多内建的过滤器,并且建立自定义过滤器也是相当的简单 在HTML的模板绑定{{}}中,我们使用 | 来调用过滤器,比如,我们想让字符串全部大写字符显示: {{ name | uppercase }} 当然了,我们也可以在JavaScript中使用$filter服务来调用过滤器,还拿字符串大写来举例: app.controller('DemoController', ['$scope', '$filt

  • AngularJS中filter的使用实例详解

    AngularJS中filter的使用实例详解 一.格式化数字为货币格式. <div>{{money|currency:"$"}}</div> <div>{{money|currency:"RMB"}}</div> script: app.controller("crl", function($scope, $filter) { $scope.money="4545"; });

  • 详解AngularJS中的filter过滤器用法

    系统的学习了一下angularjs,发现angularjs的有些思想根php的模块smarty很像,例如数据绑定,filter.如果对smarty比较熟悉的话,学习angularjs会比较容易一点.这篇简单说一下angularjs的filter功能,angularjs的filter功能可分为二种,一种是内置的过滤器,一种是自定义的. 一,内置的过滤器 1,uppercase,lowercase大小转换 {{ "lower cap string" | uppercase }} //结果:

  • Angularjs中使用Filters详解

    Filter作用就是接收一个输入,通过某个规则进行处理,然后给用户返回处理后的结果.Filter可以用在模板.控制器.或者服务,同时也会很容易自定义一个Filter过滤器. 在模板中使用Filter Filter可以用于在视图模板中使用一下语法表达式: {{ expression | filter }} 例如:格式{{ 12 | currency }}是使用currency的filter用法,让数字12过滤为货币形式,结果是$12.00. Filter可以应用到另一个过滤的结果中.这就是所谓的"

  • 详解AngularJS Filter(过滤器)用法

    AngularJS的filter,中文名"过滤器"是用来过滤变量的值,或者格式化输出,得到自己所期望的结果或格式的东东. Filter简介 Filter是用来格式化数据用的. Filter的基本原型( '|' 类似于Linux中的管道模式): {{ expression | filter }} Filter可以被链式使用(即连续使用多个filter): {{ expression | filter1 | filter2 | ... }} Filter也可以指定多个参数: {{ expr

  • AngularJS过滤器filter用法总结

    本文实例总结了AngularJS过滤器filter用法.分享给大家供大家参考,具体如下: 引言 filter过滤器对于我们来说并不陌生,他和我们现实生活中的过滤器的意思差不多,它的作用就是接收一个输入的值,然后按照某个规则进行处理然后输出最后的结果,例如我们输入一个数字,然后我们需要得到货币形式的数据,这样我们就可以利用过滤器来实现,AngularJS中的过滤器是非常简单的,分为内置和自定义两种,下面小编就简单的给大家介绍一些. 内置过滤器 ng内置了一些过滤器,它们是:currency(货币)

  • Angularjs之filter过滤器(推荐)

    现在公司用ionic,就是基于angularjs封装了一些api用于webapp,最近用的angularjs的filter确实省了很多代码,现在总结一下! ng比较鸡肋的过滤器,这里就一笔带过吧!鸡汤类常用的filter后面上例子. lowercase(小写) {{ lastName | lowercase }} uppercase(大写) {{ lastName | uppercase }} number(格式化数字) number过滤器可以为一个数字加上千位分割,像这样,123,456,78

  • 详解AngularJS中$filter过滤器使用(自定义过滤器)

    1.内置过滤器 * $filter 过滤器,是angularJs中用来处理数据以更好的方式展示给我用户.比如格式化日期,转换大小写等等. * 过滤器即有内置过滤器也支持自定义过滤器.内置过滤器很多,可以百度.关键是如何使用: * 1.在HTML中直接使用内置过滤器 * 2.在js代码中使用内置过滤器 * 3.自定义过滤器 * * (1)常用内置过滤器 * number 数字过滤器,可以设置保留数字小数点后几位等 * date 时间格式化过滤器,可自己设置时间格式 * filter 过滤的数据一般

  • 实例解析angularjs的filter过滤器

    现在公司用ionic,就是基于angularjs封装了一些api用于webapp,最近用的angularjs的filter确实省了很多代码,现在总结一下! ng比较鸡肋的过滤器,这里就一笔带过吧!鸡汤类常用的filter后面上例子. lowercase(小写) {{ lastName | lowercase }} uppercase(大写) {{ lastName | uppercase }} number(格式化数字) number过滤器可以为一个数字加上千位分割,像这样,123,456,78

  • 详解Angularjs filter过滤器

    系统的学习了一下angularjs,发现angularjs的有些思想根php的模块smarty很像,例如数据绑定,filter.如果对smarty比较熟悉的话,学习angularjs会比较容易一点.这篇简单说一下angularjs的filter功能,angularjs的filter功能可分为二种,一种是内置的过滤器,一种是自定义的. Filter是用来格式化数据用的. Filter的基本原型( '' 类似于Linux中的管道模式): {{ expression filter }} Filter可

  • angularJs使用$watch和$filter过滤器制作搜索筛选实例

    整理文档,搜刮出一个angularJs使用$watch和$filter过滤器制作搜索筛选,稍微整理精简一下做下分享. <div ng-app="module" ng-controller="ctrl"> 搜索: <input type="text" ng-model="search"> <table border="1" width="600"> &l

  • AngularJS变量及过滤器Filter用法分析

    本文实例讲述了AngularJS变量及过滤器Filter用法.分享给大家供大家参考,具体如下: 1. 关于部分变量的操作 设置变量: ng-init="hour=14" //设置hour变量在DOM中 使用data-ng-init 更好些 $scope.hour = 14; //设置hour变量在js中 使用变量: (1) 如果是在DOM 相关的 ng-*** 属性里 直接写变量名 如: <p ng-show="hour > 13">I am vi

  • AngularJS使用Filter自定义过滤器控制ng-repeat去除重复功能示例

    本文实例讲述了AngularJS使用Filter自定义过滤器控制ng-repeat去除重复功能.分享给大家供大家参考,具体如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>www.jb51.net ng-repeat去除重复</title> <script src="http://apps.bdimg.com/libs/a

  • Java Web Filter 过滤器学习教程(推荐)

    一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能.例如实现URL级别的权限访问控制.过滤敏感词汇.压缩响应信息等一些高级功能. Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter.通过F

随机推荐