创建 AngularJS 自定义过滤器,带自定义参数

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

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

<tr ng-repeat="friend in friends |myfilter:‘param1‘:‘param2‘:true:‘windowScopedFilter‘">

我们的自定义过滤器叫做 "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>
时间: 2024-10-17 08:12:51

创建 AngularJS 自定义过滤器,带自定义参数的相关文章

Flask 自定义过滤器多个参数传入

非完整HTML文件: <div class="container" style="margin-top:50px;"> <div class="row"> <div class="col-sm-10 col-sm-offset-1"> <div class="jumbotron"> <h2 id="title">{{ res.t

vue学习(二):自定义过滤器和自定义指令

#自定义指令 自定义指令的参数有: el: 指令所绑定的元素,可以用来直接操作 DOM . binding: 一个对象,包含以下属性: name: 指令名,不包括 v- 前缀. value: 指令的绑定值, 例如: v-my-directive="1 + 1", value 的值是 2. oldValue: 指令绑定的前一个值,仅在 update 和 componentUpdated 钩子中可用.无论值是否改变都可用. expression: 绑定值的字符串形式. 例如 v-my-di

实现MVC自定义过滤器,自定义Area过滤器,自定义Controller,Action甚至是ViewData过滤器

MVC开发中几种以AOP方式实现的Filters是非常好用的,默认情况下,我们通过App_Start中的FilterConfig来实现的过滤器注册是全局的,也就是整个应用程序都会使用的,针对单独的Filter我们不得不去单独的Controller或者Action去定义 如图: 那么问题来了,我现在想在FitlerConfig里面去维护所有的过滤器,但是又想实现自定义的过滤器该咋搞,MVC默认不支持! 我们先来看看,MVC默认的Fitlers注册是怎样的官方源码:GlobalFilterColle

Django(自定义过滤器和自定义标签)

模版是一个用django模版语言标记过的python字符串.模版可以包含模版标签和变量. 模版标签是在一个模版里起作用的标记.比如,一个模版标签可以产生控制结构的内容(if或者for),可以获取数据库内容或者访问其它模版标签. 一个标签块被{%%}包围 变量标签被{{}}包围 context是一个传递给模版的key-value对. 模版渲染是通过从context获取值来替换模版中变量并执行所有的模版标签. 创建自定义标签目录 首先在app底下创建一个templatetags目录,添加一下两个.p

自定义模板语言之simple_tag和自定义过滤器

扩展你的模板系统 一般是扩展模板的tag和filter两个功能.可以用来创建你自己的tag和filter功能库. 创建模板库 分为两步: 1. 首先决定由模板库在哪一个注册的app下放置,你可以放在一个已有的app目录下,也可以新建一个专门管理模板库的app,比如python manage.py startapp myTemplateLibrary.推荐后者,因为可以方便将来的重用. 2. 在app目录下创建templatetags子目录,并在里面创建两个文件,__init__.py,用来声明这

Django模板之自定义过滤器/标签/组件

自定义步骤: 1.     在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag. 2.     在app应用中创建templatetags模块包(模块名只能是templatetags) 3.     创建任意 .py 文件,如:my_tags.py ·   导入模块:from django import template ·   实例化注册器:register = template.Library()   #register的名

flask中自定义过滤器

第一种方法: 1,第一步:自定义过滤器函数 # 自定义一个函数,将list里面的数据进行排序 def list_sort(list) return list.sort() 2.第二步:注册过滤器 第一个参数是函数名,第二个参数是调用名 app.add_template_filter(list_sort, "sort1") 3,注册成功后就可以在模板中进行调用 <p>{{list | sort1}}</p> ============================

走进AngularJs(七) 过滤器(filter) - 吕大豹

时间 2013-12-15 16:22:00  博客园-原创精华区 原文  http://www.cnblogs.com/lvdabao/p/3475426.html 主题 AngularJS 过滤器(filter)正如其名,作用就是接收一个输入,通过某个规则进行处理,然后返回处理后的结果.主要用在数据的格式化上,例如获取一个数组中的子集,对数组中的元素进行排序等.ng内置了一些过滤器,它们是:currency(货币).date(日期).filter(子串匹配).json(格式化json对象).

ng 自定义过滤器的创建和使用

过滤器的本质就是一个方法,参数就是输入的值以及给过滤器指定的参数,返回值就是处理后要显示的值. ①过滤器创建var app = angular.module();app.filter('名称',func)//创建过滤器在filter的第二参数,是一个方法,返回的是过滤器方法(有返回值)app.filter('customFilter', function () { return function (value,arg1) { console.log(value,arg1); return '$'