使用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 相关文章推荐
一个简单的瀑布流效果(主体形式自写)
May 27 Javascript
ScrollDown的基本操作示例
Jun 09 Javascript
jQuery设置指定网页元素宽度和高度的方法
Mar 25 Javascript
js获取iframe中的window对象的实现方法
May 20 Javascript
JS实现兼容各种浏览器的高级拖动方法完整实例【测试可用】
Jun 21 Javascript
JavaScript 函数模式详解及示例
Sep 07 Javascript
JS焦点图,JS 多个页面放多个焦点图的实例
Dec 08 Javascript
ES2015 Symbol 一种绝不重复的值
Dec 25 Javascript
基于vue.js实现的分页
Mar 13 Javascript
解决koa2 ctx.render is not a function报错问题
Aug 07 Javascript
微信小程序非跳转式组件授权登录的方法示例
May 22 Javascript
vue获取form表单的值示例
Oct 29 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
用PHP控制用户的浏览器--ob*函数的使用说明
2007/03/16 PHP
PHP获取POST数据的几种方法汇总
2015/03/03 PHP
javascript验证身份证完全方法具体实现
2013/11/18 Javascript
JS中把字符转成ASCII值的函数示例代码
2013/11/21 Javascript
node.js中的events.EventEmitter.listenerCount方法使用说明
2014/12/08 Javascript
jQuery监控文本框事件并作相应处理的方法
2015/04/16 Javascript
jQuery插件bgStretcher.js实现全屏背景特效
2015/06/05 Javascript
javascript实现显示和隐藏div方法汇总
2015/08/14 Javascript
js基本算法:冒泡排序,二分查找的简单实例
2016/10/08 Javascript
Nodejs进阶:如何将图片转成datauri嵌入到网页中去实例
2016/11/21 NodeJs
Node.js websocket使用socket.io库实现实时聊天室
2017/02/20 Javascript
Bootstrap弹出框(Popover)被挤压的问题小结
2017/07/11 Javascript
在vue中使用jointjs的方法
2018/03/24 Javascript
详解利用eventemitter2实现Vue组件通信
2019/11/04 Javascript
Vue父组件向子组件传值以及data和props的区别详解
2020/03/02 Javascript
在Python中处理日期和时间的基本知识点整理汇总
2015/05/22 Python
解析Mac OS下部署Pyhton的Django框架项目的过程
2016/05/03 Python
python中字符串比较使用is、==和cmp()总结
2018/03/18 Python
python输入整条数据分割存入数组的方法
2018/11/13 Python
在Keras中实现保存和加载权重及模型结构
2020/06/15 Python
Python+OpenCV图像处理——图像二值化的实现
2020/10/24 Python
python 监控服务器是否有人远程登录(详细思路+代码)
2020/12/18 Python
python使用scapy模块实现ARP扫描的过程
2021/01/21 Python
canvas 橡皮筋式线条绘图应用方法
2019/02/13 HTML / CSS
Fairyseason:为个人和批发商提供女装和配件
2017/03/01 全球购物
西班牙品牌鞋子、服装和配饰在线商店:Esdemarca
2021/02/17 全球购物
电子商务专业实习生自我鉴定
2013/09/24 职场文书
医院实习介绍信
2014/01/12 职场文书
公益活动邀请函
2014/02/05 职场文书
上课打牌的检讨书
2014/02/15 职场文书
社保委托书怎么写
2014/08/02 职场文书
2015年小学辅导员工作总结
2015/05/27 职场文书
个人合作协议范本
2015/08/06 职场文书
Python虚拟环境virtualenv是如何使用的
2021/06/20 Python
vue使用element-ui按需引入
2022/05/20 Vue.js
Go gorilla securecookie库的安装使用详解
2022/08/14 Golang