使用AngularJS创建自定义的过滤器的方法


Posted in Javascript onJune 18, 2015

Angularjs过滤器是 angularjs非常棒的特性之一。有朝一日,你可能需要使用自定义过滤器,幸运的是,你找到了这篇博文。

下面显示的是自定义过滤器长什么样子(请注意myfilter):

我们的自定义过滤器叫做 "myfilter", 它有由 ':'隔开的4个参数.

这是一个将会用到的样本输入:

$scope.friends = [{name:'John', phone:'555-1276'}, 
           {name:'Annie', phone:'800-BIG-MARY'}, 
           {name:'Mike', phone:'555-4321'}, 
           {name:'Adam', phone:'555-5678'}, 
           {name:'David', phone:'555-8765'}, 
           {name:'Mikay', phone:'555-5678'}];

过滤器只显示电话号码中含有 "555"的项,这是样本输出:

 

Name   Phone 
 John   555-1276 
 Mike   555-4321 
 Adam   555-5678 
 David   555-8765 
 Mikay   555-5678

过滤"555"的处理流程由 "windowScopedFilter"执行, 它是过滤器 'myfilter'的第四个参数.
 

下面我们来实现这些功能 (把logging添加到每个输入参数):
 

var myapp = angular.module('MyFilterApp', []); 
 myapp.filter('myfilter', function() { 
  return function(input, param1) { 
   console.log("------------------------------------------------- begin dump of custom parameters"); 
   console.log("input=",input); 
   console.log("param1(string)=", param1); 
   var args = Array.prototype.slice.call(arguments); 
   console.log("arguments=", args.length); 
   if (3<=args.length) { 
      console.log("param2(string)=", args[2]); 
   } 
   if (4<=args.length) { 
      console.log("param3(bool)=", args[3]); 
   } 
   console.log("------------------------------------------------- end dump of custom parameters"); 
   // filter 
   if (5<=args.length) { 
      return window[args[4]](input); 
   } 
   return input; 
  }; 
 });

上面的代码大多都log了(译者注:将信息显示到控制台). 实际完成过滤的最重要的一部分是:
 

// filter 
   if (5<=args.length) { 
      return window[args[4]](input); 
   } 
   return input;

"return window[args[4]](input)" 调用第四个参数, 它是 'windowScopedFilter'.

这是控制台输出:

"------------------------------------------------- begin dump of custom parameters" custom_filter_function.html:21 
 "input=" [object Array] custom_filter_function.html:22 
 "param1(string)=" "param1" custom_filter_function.html:23 
 "arguments=" 5 custom_filter_function.html:25 
 "param2(string)=" "param2" custom_filter_function.html:27 
 "param3(bool)=" true custom_filter_function.html:30 
 "------------------------------------------------- end dump of custom parameters" custom_filter_function.html:32 
 "------------------------------------------------- begin dump of custom parameters" custom_filter_function.html:21 
 "input=" [object Array] custom_filter_function.html:22 
 "param1(string)=" "param1" custom_filter_function.html:23 
 "arguments=" 5 custom_filter_function.html:25 
 "param2(string)=" "param2" custom_filter_function.html:27 
 "param3(bool)=" true custom_filter_function.html:30 
 "------------------------------------------------- end dump of custom parameters" custom_filter_function.html:32

完整代码:
 
 

<html> 
 <head> 
 <script src="angular.min.js"></script> 
 <script type="text/javascript"> 
 function windowScopedFilter (input) { 
   var output = []; 
   angular.forEach(input, function(v,k){ 
      if (v.phone.contains("555")) { 
        output.push(v); 
      } 
   }); 
   return output;    
 } 
 var myapp = angular.module('MyFilterApp', []); 
 myapp.filter('myfilter', function() { 
  return function(input, param1) { 
   console.log("------------------------------------------------- begin dump of custom parameters"); 
   console.log("input=",input); 
   console.log("param1(string)=", param1); 
   var args = Array.prototype.slice.call(arguments); 
   console.log("arguments=", args.length); 
   if (3<=args.length) { 
      console.log("param2(string)=", args[2]); 
   } 
   if (4<=args.length) { 
      console.log("param3(bool)=", args[3]); 
   } 
   console.log("------------------------------------------------- end dump of custom parameters"); 
   // filter 
   if (5<=args.length) { 
      return window[args[4]](input); 
   } 
   return input; 
  }; 
 }); 
 myapp.controller('MyFilterController', ['$scope', function($scope) { 
  $scope.friends = [{name:'John', phone:'555-1276'}, 
           {name:'Annie', phone:'800-BIG-MARY'}, 
           {name:'Mike', phone:'555-4321'}, 
           {name:'Adam', phone:'555-5678'}, 
           {name:'David', phone:'555-8765'}, 
           {name:'Mikay', phone:'555-5678'}]; 
 }]); 
 </script> 
 </head> 
 <body ng-app="MyFilterApp"> 
 <div ng-controller="MyFilterController"> 
   <table id="searchTextResults"> 
    <tr><th>Name</th><th>Phone</th></tr> 
    <tr ng-repeat="friend in friends |myfilter:'param1':'param2':true:'windowScopedFilter'"> 
    <td>{{friend.name}}</td> 
    <td>{{friend.phone}}</td> 
    </tr> 
   </table> 
 </div> 
 <hr> 
 </body> 
 </html>
Javascript 相关文章推荐
javascript真的不难-回顾一下基础知识
Jan 15 Javascript
给Flash加一个超链接(推荐使用透明层)兼容主流浏览器
Jun 09 Javascript
前台js对象在后台转化java对象的问题探讨
Dec 20 Javascript
jQuery实现统计输入文字个数的方法
Mar 11 Javascript
jquery处理页面弹出层查询数据等待操作实例
Mar 25 Javascript
JavaScript编写简单的计算器
Nov 25 Javascript
AngularJS应用开发思维之依赖注入3
Aug 19 Javascript
jQuery动态增减行的实例代码解析(推荐)
Dec 05 Javascript
利用vue组件自定义v-model实现一个Tab组件方法示例
Dec 06 Javascript
mockjs+vue页面直接展示数据的方法
Dec 19 Javascript
JavaScript禁用右键单击优缺点分析
Jan 20 Javascript
VUEX采坑之路之获取不到$store的解决方法
Nov 08 Javascript
深入讲解AngularJS中的自定义指令的使用
Jun 18 #Javascript
3个可以改善用户体验的AngularJS指令介绍
Jun 18 #Javascript
在AngularJS应用中实现一些动画效果的代码
Jun 18 #Javascript
使用AngularJS对路由进行安全性处理的方法
Jun 18 #Javascript
浅谈Node.js中的定时器
Jun 18 #Javascript
浅析AngularJS中的生命周期和延迟处理
Jun 18 #Javascript
Node.js事件驱动
Jun 18 #Javascript
You might like
虫族 ZERG 概述
2020/03/14 星际争霸
PHP冒泡算法详解(递归实现)
2014/11/10 PHP
WordPress中给文章添加自定义字段及后台编辑功能区域
2015/12/19 PHP
PHP文件后缀不强制为.php方法
2019/03/31 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
textarea中的手动换行处理的jquery代码
2011/02/26 Javascript
解析JavaScript中instanceof对于不同的构造器或许都返回true
2013/12/03 Javascript
javascript日期格式化示例分享
2014/03/05 Javascript
js中实现多态采用和继承类似的方法
2014/08/22 Javascript
纯JavaScript代码实现移动设备绘图解锁
2015/10/16 Javascript
利用原生JS与jQuery实现数字线性变化的动画
2017/02/24 Javascript
jQuery EasyUI ProgressBar进度条组件
2017/02/28 Javascript
详解vue表单验证组件 v-verify-plugin
2017/04/19 Javascript
js实现登录注册框手机号和验证码校验(前端部分)
2017/09/28 Javascript
使用JQuery实现图片轮播效果的实例(推荐)
2017/10/24 jQuery
JavaScript实现二叉树定义、遍历及查找的方法详解
2017/12/20 Javascript
详解nuxt sass全局变量(公共scss解决方案)
2018/06/27 Javascript
jQuery实现checkbox全选功能完整实例
2018/07/12 jQuery
详解JavaScript中的强制类型转换
2019/04/15 Javascript
微信小程序wepy框架学习和使用心得详解
2019/05/24 Javascript
了解重排与重绘
2019/05/29 Javascript
微信小程序获取位置展示地图并标注信息的实例代码
2019/09/01 Javascript
原生JS利用transform实现banner的无限滚动示例代码
2020/06/15 Javascript
Python2.7 实现引入自己写的类方法
2018/04/29 Python
使用Python微信库itchat获得好友和群组已撤回的消息
2018/06/24 Python
Python爬虫实现使用beautifulSoup4爬取名言网功能案例
2019/09/15 Python
python flask搭建web应用教程
2019/11/19 Python
Python基于百度AI实现OCR文字识别
2020/04/02 Python
Python数据可视化实现多种图例代码详解
2020/07/14 Python
详解Python利用configparser对配置文件进行读写操作
2020/11/03 Python
使用HTML5 Canvas API绘制弧线的教程
2016/03/22 HTML / CSS
广州御银科技股份有限公司试卷(C++)
2016/11/04 面试题
幼儿园运动会入场词
2014/02/10 职场文书
《春天来了》教学反思
2014/04/07 职场文书
Python初识逻辑与if语句及用法大全
2021/08/07 Python
详解MySQL中timestamp和datetime时区问题导致做DTS遇到的坑
2021/12/06 MySQL