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

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>
(0)

相关推荐

  • AngularJS中的过滤器filter用法完全解析

    在AngularJS的世界里,filter提供了一种格式化数据的方法,Angular也提供给我们了很多内建的过滤器,并且建立自定义过滤器也是相当的简单 在HTML的模板绑定{{}}中,我们使用 | 来调用过滤器,比如,我们想让字符串全部大写字符显示: {{ name | uppercase }} 当然了,我们也可以在JavaScript中使用$filter服务来调用过滤器,还拿字符串大写来举例: app.controller('DemoController', ['$scope', '$filt

  • AngularJS中的过滤器使用详解

    过滤器是用来更改修改数据,并且可以在表达式或使用管道符指令将其归入.以下是常用的过滤器的列表.  小写过滤器 添加小写的过滤器,使用管道符的表达式.在这里添加小写过滤器,以小写字母打印学生姓名. Enter first name:<input type="text" ng-model="student.firstName"> Enter last name: <input type="text" ng-model="s

  • AngularJS ng-table插件设置排序

    基础概念 ng-table提供了一个表头来提供,基础的过滤信息: (1)指定一列的过滤器,然后模板就会使用. (2)ngTable支持number, text, select 和 select-multiple的值模板. (3)可以有选择的为NgTableParams提供初始过滤值. <div class="row"> <div class="col-md-6" ng-controller="demoController as demo&

  • AngularJS的内置过滤器详解

    今天我们来了解一下AngularJS的内置过滤器 先来看看这些内置过滤器使用方法: 一个过滤器,不带参数的情况 {{expression | filter}} 一个过滤器,带参数的情况 {{expression | filter:arguments}} 一个过滤器,带多个参数的情况 {{expression | filter: arg1: arg2: ...}} 多个过滤器,不带参数的情况 {{expression | filter1 | filter2 | ...}} 下面我们分别使用以下An

  • 详解AngularJS Filter(过滤器)用法

    AngularJS的filter,中文名"过滤器"是用来过滤变量的值,或者格式化输出,得到自己所期望的结果或格式的东东. Filter简介 Filter是用来格式化数据用的. Filter的基本原型( '|' 类似于Linux中的管道模式): {{ expression | filter }} Filter可以被链式使用(即连续使用多个filter): {{ expression | filter1 | filter2 | ... }} Filter也可以指定多个参数: {{ expr

  • 详解AngularJS中自定义过滤器

    过滤器(filter)正如其名,作用就是接收一个输入,通过某个规则进行处理,然后返回处理后的结果.主要用在数据的格式化上,例如获取一个数组中的子集,对数组中的元素进行排序等.ng内置了一些过滤器,它们是:currency(货币).date(日期).filter(子串匹配).json(格式化json对象).limitTo(限制个数).lowercase(小写).uppercase(大写).number(数字).orderBy(排序).总共九种.除此之外还可以自定义过滤器,这个就强大了,可以满足任何

  • 妙用Angularjs实现表格按指定列排序

    使用AngularJS的过滤器,可以很容易的实现在表格中,点击某一列标题进行排序,实现过程如下: html代码: <table class="table table-border" ng-app="myapp" ng-controller="orderByCtrl"> <thead> <tr> <th>inx</th> <th ng-click="col='name';d

  • AngularJS 过滤与排序详解及实例代码

    前面了解了AngularJS的使用方法,这里就简单的写个小程序,实现查询过滤以及排序的功能. 本程序中可以了解到: 1 angularjs的过滤器 2 ng-repeat的使用方法 3 控制器的使用 4 数据的绑定 程序设计分析 首先,如果要是先查询过滤,就要使用到AngularJS中的 过滤器filter 了. 直接在表达式的后面使用管道命令符 | ,按照下面的写法就可以达到一个过滤的效果: {{ persons | filter:query }} 通过使用filter实现过滤操作,query

  • 详解AngularJS中的filter过滤器用法

    系统的学习了一下angularjs,发现angularjs的有些思想根php的模块smarty很像,例如数据绑定,filter.如果对smarty比较熟悉的话,学习angularjs会比较容易一点.这篇简单说一下angularjs的filter功能,angularjs的filter功能可分为二种,一种是内置的过滤器,一种是自定义的. 一,内置的过滤器 1,uppercase,lowercase大小转换 {{ "lower cap string" | uppercase }} //结果:

  • Angularjs使用过滤器完成排序功能

    本文实例为大家分享了Angularjs过滤器完成排序的具体代码,供大家参考,具体内容如下 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript" src="js/angularjs.js" ></script>

随机推荐