使用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 相关文章推荐
jquery 日期分离成年月日的代码
May 14 Javascript
由JavaScript中call()方法引发的对面向对象继承机制call的思考
Sep 12 Javascript
js之onload事件的一点使用心得
Aug 14 Javascript
jquery选择器-根据多个属性选择示例代码
Oct 21 Javascript
如何在JavaScript中实现私有属性的写类方式(二)
Dec 04 Javascript
jQuery中click事件的定义和用法
Dec 20 Javascript
AngularJS集合数据遍历显示的实例
Dec 27 Javascript
js 取消页面可以选中文字的功能方法
Jan 02 Javascript
vue2.0项目集成Cesium的实现方法
Jul 30 Javascript
Vue发布订阅模式实现过程图解
Apr 30 Javascript
JS XMLHttpRequest原理与使用方法深入详解
Apr 30 Javascript
jQuery实现倒计时功能完整示例
Jun 01 jQuery
深入讲解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
php 无限级数据JSON格式及JS解析
2010/07/17 PHP
解析php常用image图像函数集
2013/06/24 PHP
PHP提高编程效率的20个要点
2015/09/23 PHP
PHP array_key_exists检查键名或索引是否存在于数组中的实现方法
2016/06/13 PHP
php封装的page分页类完整实例
2016/10/18 PHP
浅析PHP7 的垃圾回收机制
2019/09/06 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
一个多次搜索+多次传值的解决方案
2007/01/20 Javascript
JS文本框不能输入空格验证方法
2013/03/19 Javascript
JS实现点击颜色块切换指定区域背景颜色的方法
2015/02/25 Javascript
jQuery选择id属性带有点符号元素的方法
2015/03/17 Javascript
JavaScript实现动态删除列表框值的方法
2015/08/12 Javascript
详解nodejs实现本地上传图片并预览功能(express4.0+)
2017/06/28 NodeJs
Vue中引入样式文件的方法
2017/08/18 Javascript
nginx+vue.js实现前后端分离的示例代码
2018/02/12 Javascript
JavaScript设计模式之单例模式简单实例教程
2018/07/02 Javascript
bootstrap里bootstrap动态加载下拉框的实例讲解
2018/08/10 Javascript
解决angular2在双向数据绑定时[(ngModel)]无法使用的问题
2018/09/13 Javascript
js中值引用和地址引用实例分析
2019/06/21 Javascript
element-ui 弹窗组件封装的步骤
2021/01/22 Javascript
Python写的PHPMyAdmin暴力破解工具代码
2014/08/06 Python
Python随机生成信用卡卡号的实现方法
2015/05/14 Python
Python文件读取的3种方法及路径转义
2015/06/21 Python
python发送邮件实例分享
2017/07/28 Python
浅谈python中拼接路径os.path.join斜杠的问题
2018/10/23 Python
python使用udp实现聊天器功能
2018/12/10 Python
Python中正则表达式的用法总结
2019/02/22 Python
python绘图模块之利用turtle画图
2021/02/12 Python
HTML5+CSS3 实现灵动的动画 TAB 切换效果(DEMO)
2017/09/15 HTML / CSS
HTML5的文档结构和新增标签完全解析
2017/04/21 HTML / CSS
商务主管岗位职责
2013/12/08 职场文书
机关党员四风问题个人整改措施
2014/10/26 职场文书
公司给客户的感谢信
2015/01/23 职场文书
2015政治思想表现评语
2015/03/25 职场文书
Nginx实现会话保持的两种方式
2022/03/18 Servers
基于Redission的分布式锁实战
2022/08/14 Redis