AngularJS中的过滤器是用于对数据的格式化,或者筛选的函数,可以直接通过以下语法使用:
{{expression|filter}}
{{expression|filter1|filter2}}
{{expression|filter1:param1,param2,...|filter2}
过滤器的种类有number,currency,date,json,limitTo,lowercase,uppercase,filter,orderBy。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
<!DOCTYPE html>
<
html
ng-app
=
"app"
>
<
head
>
<
meta
charset
=
"utf-8"
>
</
head
>
<
body
ng-app
=
"app"
>
<
div
ng-controller
=
"Controller1"
>
<
p
>{{1234567890 | number}}</
p
>
<!--显示1,234,567,890-->
<
p
>{{1234.56789 | number:3}}</
p
>
<!--显示1,234.568,保留3位小数-->
<
p
>{{1234.56789 | currency}}</
p
>
<!--显示$1,234.57,货币,默认的前缀是美元符号-->
<
p
>{{1234.56789 | currency:'¥'}}</
p
>
<!--显示¥1,234.57-->
<
p
>{{today | date:'medium'}}</
p
>
<!--显示Jun 28, 2015 3:45:54 PM-->
<
p
>{{today | date:'short'}}</
p
>
<!--显示6/28/15 3:45 PM-->
<
p
>{{today | date:'fullDate'}}</
p
>
<!--显示Sunday, June 28, 2015-->
<
p
>{{today | date:'longDate'}}</
p
>
<!--显示June 28, 2015-->
<
p
>{{today | date:'shortDate'}}</
p
>
<!--显示6/28/15-->
<
p
>{{today | date:'shortTime'}}</
p
>
<!--显示3:45 PM-->
<
p
>{{today | date:'mediumTime'}}</
p
>
<!--显示3:45:54 PM-->
<
p
>{{today | date:'yyyy-MM-dd HH:mm:ss'}}</
p
>
<!--显示2015-06-28 15:45:54-->
<
p
>{{['a','b','c','d','e'] | limitTo:3}}</
p
>
<!--显示["a","b","c"],截取前3位-->
<
p
>{{['a','b','c','d','e'] | limitTo:-3}}</
p
>
<!--显示["c","d","e"],截取后3位-->
<
p
>{{'Hello World' | lowercase}}</
p
>
<!--显示hello world-->
<
p
>{{'Hello World' | uppercase}}</
p
>
<!--显示HELLO WORLD-->
<
p
>{{data.phone | filter:'le'}}</
p
>
<!--显示[{"name":"iPhone","company":"Apple"}],只匹配value值-->
<
p
>{{data.phone | filter:{company:'A'} }}</
p
>
<!--显示[{"name":"iPhone","company":"Apple"},{"name":"HUAWEI P8","company":"HUAWEI"}],company中有A就会匹配到-->
<
p
>{{data.phone | orderBy:'name'}}</
p
>
<!--显示[{"name":"Galaxy S5","company":"Sumsung"},{"name":"HUAWEI P8","company":"HUAWEI"},{"name":"iPhone","company":"Apple"}],以name的值做排序,默认是从小到大排序-->
<
p
>{{data.phone | orderBy:-'name'}}</
p
>
<!--显示[{"name":"iPhone","company":"Apple"},{"name":"Galaxy S5","company":"Sumsung"},{"name":"HUAWEI P8","company":"HUAWEI"}],反序-->
<
p
>{{[2,24,13,89,3,8,41,9,10] | filter:checkNum}}</
p
>
<!--自定义的过滤器,显示[2,3,8,9,10],定义见90~95行-->
</
div
>
<
script
src
=
"../JS/angular.min.js"
></
script
>
<
script
type
=
"text/javascript"
>
angular.module('app', [])
.controller('Controller1', function($scope, $filter) {
$scope.today = new Date;
$scope.data = {
phone: [{
name: 'iPhone',
company: 'Apple'
}, {
name: 'Galaxy S5',
company: 'Sumsung'
}, {
name: 'HUAWEI P8',
company: 'HUAWEI'
}]
};
var jsonString = $filter('json')($scope.data);
console.log(jsonString);
/* console输出json格式的data
{
"phone": [
{
"name": "iPhone",
"company": "Apple"
},
{
"name": "Galaxy S5",
"company": "Sumsung"
},
{
"name": "HUAWEI P8",
"company": "HUAWEI"
}
]
}
*/
//自定义过滤器
$scope.checkNum = function(num) {
//>10的不保留
if (num > 10) return false;
else return true;
}
});
</
script
>
</
body
>
</
html
>
|
除了上面自定义过滤器的方法外,还有两种专门的方法。
第一种 module.filter(name,filterFactory)
第二种 @$filterProvider.register();
第一种的例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
<!DOCTYPE html>
<
html
ng-app
=
"app"
>
<
head
>
<
meta
charset
=
"utf-8"
>
</
head
>
<
body
ng-app
=
"app"
>
<
div
ng-controller
=
"Controller1"
>
<
ul
>
<!-- 循环输出data里面的数据,用自定义的名为filterAge的过滤器过滤 -->
<
li
ng-repeat
=
"item in data | filterAge"
>
`item`.`name` `item`.`age` `item`.`position`
</
li
>
</
ul
>
</
div
>
<
script
src
=
"../JS/angular.min.js"
></
script
>
<
script
type
=
"text/javascript"
>
angular.module('app', [], function($provide) {
//service提供数据
$provide.service('data', function() {
return [{
name: 'Wilshere',
age: 23,
position: 'midfield'
}, {
name: 'Giroud',
age: 28,
position: 'striker'
}, {
name: 'Cech',
age: 33,
position: 'goalkeeper'
}];
});
})
//用.filter的方法定义过滤器
.filter('filterAge', function() {
return function(obj) {
//obj是过滤前的对象
var newObj = [];
angular.forEach(obj, function(i) {
if (i.age > 25) {
newObj.push(i);
}
});
return newObj;
}
})
.controller('Controller1', function($scope, data) {
$scope.data = data;
});
</
script
>
</
body
>
</
html
>
|
第二种的例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
<!DOCTYPE html>
<
html
ng-app
=
"app"
>
<
head
>
<
meta
charset
=
"utf-8"
>
</
head
>
<
body
ng-app
=
"app"
>
<
div
ng-controller
=
"Controller1"
>
<
ul
>
<!-- 循环输出data里面的数据,用自定义的名为filterAge的过滤器过滤 -->
<
li
ng-repeat
=
"item in data | filterAge"
>
`item`.`name` `item`.`age` `item`.`position`
</
li
>
</
ul
>
</
div
>
<
script
src
=
"../JS/angular.min.js"
></
script
>
<
script
type
=
"text/javascript"
>
angular.module('app', [], function($filterProvider, $provide) {
//用注册的方法自定义过滤器
$filterProvider.register('filterAge', function() {
return function(obj) {
var newObj = [];
angular.forEach(obj, function(i) {
//age大于25的才会输出
if (i.age > 25) {
newObj.push(i);
}
});
return newObj;
}
});
//service提供数据
$provide.service('data', function() {
return [{
name: 'Wilshere',
age: 23,
position: 'midfield'
}, {
name: 'Giroud',
age: 28,
position: 'striker'
}, {
name: 'Cech',
age: 33,
position: 'goalkeeper'
}];
});
})
.controller('Controller1', function($scope, data) {
$scope.data = data;
});
</
script
>
</
body
>
</
html
>
|
本文转自 iampomelo 51CTO博客,原文链接:http://blog.51cto.com/iampomelo/1668754,如需转载请自行联系原作者