AngularJS 入门4

本文介绍了AngularJS中过滤器的基本概念及其使用方法,包括在视图模板和代码中使用过滤器,创建自定义过滤器及如何为其添加参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AngularJS  入门4


八. 使用过滤器转化输出

1. 在视图模板中使用过滤器

过滤器也是一种服务负责对输入的内容进行处理转换,以便更好地向用户显示。

过滤器可以在模板中的{{}}标记中使用:

  1. {{ expression | filter:arg1:arg2}}
  • 预置的过滤器

AngularJS的ng模块实现了一些预置的过滤器,如:currency、number等等,可以直接 使用。例如下面的示例将对数字12使用currency过滤器,结果将是"$12.00":

  1. {{12|currency}}
  • 带参数的过滤器

过滤器也可以有参数,例如下面的示例将数字格式化为"1,234.00":

  1. {{1234|number:2}}
  • 过滤器流水线

过滤器可以应用于另一个过滤器的输出,就像流水线,语法如下:

  1. {{expression|filter1|filter2|...}}

javascript 实例:

angular.module("ezstuff",[])
.controller("ezCtrl",function($scope){
$scope.total = 123;
});


HTML 实例:

<html ng-app="ezstuff">
<head>
<script src="angular.min.js"></script>
</head>
<body>
<div ng-controller="ezCtrl">
Total salary is {{total|number:2|currency}}
</div>
</body>
</html>


2.在代码中使用过滤器

别忘了过滤器也是一种服务,所以你可以将它注入你的代码中。

和普通的服务不同,过滤器在注入器中注册时,名称被加了一个后缀:Filter。 例如,number过滤器的服务名称是:numberFilter,而currency过滤器的服务名称是: currencyFilter。

通常我们的代码被封装在三个地方:控制器、服务、指令。这些地方都支持服务的直接 注入,例如:

  1. angular.module'myModule',[])
  2. .controllerfunction$scopenumberFilter){
  3. //...
  4. })

有时你需要显式的通过注入器调用过滤器,那么使用注入器invoke()方法:

  1. angular.injector(['ng'])
  2. .invokefunctionnumberFilter){
  3. //...
  4. })

总之,记住过滤器是一种服务,除了名字需要追加Filter后缀,和其他服务的调用方法没 什么区别

下边的示例在控制器中注入了number和currency过滤器,实现对total的格式化。


javascript 代码:

angular.module("ezstuff",[])
.controller("ezCtrl",function($scope,numberFilter,currencyFilter){
$scope.total = currencyFilter(numberFilter(123,2));
});

HTML 代码:

<html ng-app="ezstuff">
<head>
<script src="angular.min.js"></script>
</head>
<body>
<div ng-controller="ezCtrl">
Total salary is {{total}}
</div>
</body>
</html>


3.创建过滤器

和指令类似,过滤器也是一种特殊的服务,与创建一个普通的服务相比较:

  1. 必须使用模块的filter()接口注册服务
  2. 必须提供对象工厂/factory方法
  3. 对象工程必须返回一个过滤器函数,其第一个参数为输入变量
  1. //定义过滤器类工厂
  2. var filterFactory = function(){
  3. //定义过滤器函数
  4. var filter = functioninputextra_args){
  5. //process input and generate output
  6. return output
  7. }
  8. };
  9. //在模块上注册过滤器
  10. angular.module"someModule",[])
  11. .filter"filterName"filterFactory);

右边的示例定义了一个将字符串格式化为大写的过滤器


javascript 实例:

//过滤器对象工厂定义
var ezUCFilterFactory = function(){
//过滤器对象返回的是一个过滤函数
var filter = function(input){
return input.toUpperCase();
}
return filter;
};
angular.module("ezstuff",[])
//使用模块的filter()接口注册过滤器
.filter("ezUC",ezUCFilterFactory);


html 代码实例:

<html ng-app="ezstuff">
<head>
<script src="angular.min.js"></script>
</head>
<body ng-init="text='just a demo!'">
<p>{{text|ezUC}}</p></body>
</html>


4.为过滤器增加参数

过滤器的行为可以通过额外的参数来调整。比如,我们希望改进上一节的示例,使其可以 支持仅大写每个单词的首字母。

  • 实现

通过在过滤器类工厂返回的过滤器函数中传入额外的参数,就可以实现这个功能。

  1. var filter = functioninputargument1argument2){...}
  • 使用

在使用过滤器时,额外的参数通过前缀:引入,比如

  1. {{expression|filter:argument1:argument2}}

下边的示例实现了支持参数的过滤器ezUC,试着去掉HTML模板中过滤器ezUC的参数, 看看显示输出的区别!


javascript 实例:

//过滤器对象工厂定义
var ezUCFilterFactory = function(){
//过滤器对象返回的是一个过滤函数
return function(input,cap){
if(!cap) return input.toUpperCase();
var output = input.replace(/\b\w+\b/g, function(word) {
return word.substring(0,1).toUpperCase( ) +word.substring(1);
});
return output;
}
};
angular.module("ezstuff",[])
//使用模块的filter()接口注册过滤器
.filter("ezUC",ezUCFilterFactory);


HTML实例:

<html ng-app="ezstuff">
<head>
<script src="angular.min.js"></script>
</head>
<body ng-init="text='just a demo!'">
<p>{{text|ezUC:true}}</p></body>
</html>

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值