使用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静态页面传值的三种方法分享
Nov 12 Javascript
按钮接受回车事件的三种实现方法
Jun 06 Javascript
Javascript 构造函数详解
Oct 22 Javascript
JavaScript 不支持 indexof 该如何解决
Mar 30 Javascript
jQuery选择器及jquery案例详解(必看)
May 20 Javascript
AngularJS优雅的自定义指令
Jul 01 Javascript
js获取css的各种样式并且设置他们的方法
Aug 22 Javascript
vue中路由验证和相应拦截的使用详解
Dec 13 Javascript
webpack本地开发环境无法用IP访问的解决方法
Mar 20 Javascript
对Vue- 动态元素属性及v-bind和v-model的区别详解
Aug 27 Javascript
详解javascript函数写法大全
Mar 25 Javascript
vue 使用饿了么UI仿写teambition的筛选功能
Mar 01 Vue.js
深入讲解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中强制下载文件的代码(解决了IE下中文文件名乱码问题)
2011/05/09 PHP
php 模拟 asp.net webFrom 按钮提交事件的思路及代码
2013/12/02 PHP
php获取系统变量方法小结
2015/05/29 PHP
深入探究PHP的多进程编程方法
2015/08/18 PHP
php array_merge_recursive 数组合并
2016/10/26 PHP
JavaScript单元测试ABC
2012/04/12 Javascript
解决IE6的PNG透明JS插件使用介绍
2013/04/17 Javascript
深入document.write()与HTML4.01的非成对标签的详解
2013/05/08 Javascript
JavaScript数组深拷贝和浅拷贝的两种方法
2014/04/16 Javascript
jQuery前端开发35个小技巧
2016/05/24 Javascript
jQuery简单实现中间浮窗效果
2016/09/04 Javascript
浅谈js函数的多种定义方法与区别
2016/11/29 Javascript
Javascript中关于Array.filter()的妙用详解
2016/12/04 Javascript
ajax的分页查询示例(不刷新页面)
2017/01/11 Javascript
jquery实现数字输入框
2017/02/22 Javascript
bootstrap栅格系统示例代码分享
2017/05/22 Javascript
新手vue构建单页面应用实例代码
2017/09/18 Javascript
关于js的三种使用方式(行内js、内部js、外部js)的程序代码
2018/05/05 Javascript
vue把输入框的内容添加到页面的实例讲解
2019/11/11 Javascript
用Python编写一个简单的FUSE文件系统的教程
2015/04/02 Python
Python实现查找系统盘中需要找的字符
2015/07/14 Python
利用Python获取操作系统信息实例
2016/09/02 Python
关于pip的安装,更新,卸载模块以及使用方法(详解)
2017/05/19 Python
对python3中, print横向输出的方法详解
2019/01/28 Python
Python3实现从排序数组中删除重复项算法分析
2019/04/03 Python
python中的print()输出
2019/04/12 Python
Python调用Windows API函数编写录音机和音乐播放器功能
2020/01/05 Python
Pytorch之finetune使用详解
2020/01/18 Python
Python调用Windows命令打印文件
2020/02/07 Python
Python任务调度模块APScheduler使用
2020/04/15 Python
Python模拟登入的N种方式(建议收藏)
2020/05/31 Python
Django返回HTML文件的实现方法
2020/09/17 Python
Python基础进阶之海量表情包多线程爬虫功能的实现
2020/12/17 Python
如何强制垃圾回收
2015/10/06 面试题
进修护士自我鉴定
2013/10/14 职场文书
红十字会救护培训简讯
2015/07/20 职场文书