AngularJS过滤器主要是用在对表达式的值进行再处理, 再将处理后的值展示在视图中。
调用格式如下:{{ expression | filter:自定义参数 }}
其中,expression 是表达式,如果存在过滤器时,其会作为过滤器的第一个参数传入到过滤器中。filter是过滤器名称,冒号后是自定义参数。
AngularJS已经实现一些常用的内置过滤器,使用时我们直接引用就行:
currency,
dateFilte,
filterFilte,
jsonFilter,
limitToFilter,
lowercaseFilter,
numberFilter,
orderByFilter,
uppercaseFilter
特殊情况下我们也可以实现自己的过滤器, 这个也相当容易:在你的模块中注册一个新的"过滤器工厂函数" 就行了。这个工厂函数需要返回一个过滤器函数,这个过滤函数的第一个参数接受的是输入(即:表达式的值), 除此之外还可定义任何的自定义参数。
下面做俩个典型的实例:
自定义格式化日期过滤器
将当前系统日期转为指定格式的形式
Html:
<html ng-app="MyReverseModule">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>自定义格式化日期过滤器</title>
<script language="javascript" type="text/javascript" src="angular.js"></script>
<script language="javascript" type="text/javascript" src="controller.js"></script>
</head>
<body>
<div ng-controller="Ctrl">
选择格式:<select ng-model="selDate">
<option value="0">YYYY-MM-dd</option>
<option value="1">YYYY年MM月dd日</option>
</select>
<br />
<span>转换当前日期:{{selDate|formatDate}}</span>
</div>
</body>
</html>
Javascript:
//格式化日期
angular.module('MyReverseModule', []).
filter('formatDate', function() {
return function(input) {
var date = new Date();
var year = date.getYear() + 1900;
var month = date.getMonth() + 1;
var day = date.getDate();
month = month <10 ? "0" + month : month;
day = day <10 ? "0"+day : day;
var str = "";
if(input == "0"){
str += year;
str += "-";
str += month;
str += "-";
str += day;
}else if(input == "1"){
str += year;
str += "年";
str += month;
str += "月";
str += day;
str += "日";
}
return str;
}
});
function Ctrl($scope) {
$scope.selDate = "1";
}
自定义转化大写过滤器
将表达式中的小写转为daxie
Html:
<html ng-app="MyReverseModule">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>自定义转化大写过滤器</title>
<script language="javascript" type="text/javascript" src="angular.js"></script>
<script language="javascript" type="text/javascript" src="controller1.js"></script>
</head>
<body>
<div ng-controller="Ctrl">
<input ng-model="greeting" type="greeting"><br>
转换为大写: {{greeting|reverse:true}}<br>
</div>
</body>
</html>
{{greeting|reverse:true}}中我们传入自定义的参数值true,用来控制是否需要转换。
javascript:
angular.module('MyReverseModule', []).
filter('reverse', function() {
return function(input, uppercase) {
if (uppercase) {//是否需要转为大写
input = input.toUpperCase();
}
return input;
}
});
function Ctrl($scope) {
$scope.greeting = 'hello';
}