angularjs,filter,angular过滤器现在公司用ionic,就是基于angularjs封装了一些api用于webapp,最近用的angularjs的filter确实省了很多代码,现在总结一下! ng比较鸡肋的过滤器,这里就一笔带过吧!鸡汤类常用的filter后面上例子。 lowercase(小写)
{{ lastName | lowercase }} uppercase(大写)
{{ lastName | uppercase }} number(格式化数字)
number过滤器可以为一个数字加上千位分割,像这样,123,456,789。同时接收一个参数,可以指定小float型保留几位小数:
currency (货币处理)
json(格式化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 ljyage 27stature 165name nickage 25stature 170name xzlage 27stature 175name zyhage 29stature 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 zyhage 29stature 165name xzlage 27stature 175name ljyage 27stature 165name nickage 25stature 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 zyhage 29stature 165name xzlage 27stature 175name ljyage 27stature 165name nickage 25stature 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 nickage 25stature 170name ljyage 27stature 165name xzlage 27stature 175name zyhage 29stature 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 nickage 25stature 170name xzlage 27stature 175name ljyage 27stature 165name zyhage 29stature 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等于数组的每个元素累加的和。避免后台为传值,而又将次参数传人自定义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也是nanreturn 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也是nanreturn 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过滤器,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的,在此也非常感谢大家对wanshiok.com网站的支持! angularjs,filter,angular过滤器
|