前言:使用angular開發項目已經有一段時間了,相比于以前使用的jq,angular這種數據綁定形式的框架使用起來真是太方便了。今天在這里想給大家分享一下angular中一個很贊的功能——過濾器。自己會選取一下自己認為比較實用的方法總結給大家。
首先,angular中的過濾器分為兩大類。一種是angular自帶的內置過濾器,另一種是用戶根據自己的需求自定義的過濾器。
1.內置過濾器
(1)時間格式化
{{1485449967197 | date}}
輸出: ?Jan 27, 2017 (不帶參數的這樣不常用)
{{1485449967197 | date:"yyyy-MM-dd hh:mm:ss"}}
輸出: ?2017-01-27 12:59:27 ?(可以根據自己的需求選擇輸出的形式,如只需要顯示月份和天數可以這樣 date:"MM-dd")
(2)number格式化
{{ 1234567 | number }}
輸出:1,234,567 (不帶參數)
{{ 1.234567 | number:1 }} ?
輸出:1.2 (四舍五入保留1位)
(3)limitTo長度限制
截取字符串:
{{abcdefg | limitTo:3}}
輸出:abc
{{abcdefg | limitTo:-2}}
輸出:fg
截取數組:
$scope.arr=[
{name:aa},
{name:bb},
{name:cc},
{name:dd},
]
{{arr| limitTo:2}}
輸出:[{name:aa},{name:bb}] (這個功能在做前端分頁的時候很有用!)
(4)filter查找
$scope.arr=[
{name:aa},
{name:bb},
{name:cc},
{name:dd},
]
{{arr | filter:{name:aa} }} 查找arr數組中name為aa的項
輸出:[{name:aa}]
(5)orderBy對像排序
$scope.arr=[
{num:4},
{num:7},
{num:1},
{num:2},
]
{{arr | orderBy:num}}
{{arr | orderBy:num:true}}
輸出:
[{"num":1},{"num":2},{"num":4},{"num":7}] (以num屬性排序默認升序)
[{"num":7},{"num":4},{"num":2},{"num":1}] (以num屬性排序num后傳true則為降序)
以上就是angular中我認為比較實用的過濾器,當然angular還內置了其他的過濾器,比如json,貨幣,大小寫等。但是通常都不會用,需要可以自己去查手冊,用法也是一樣的~
2自定義過濾器
很多時候內置的過濾器并不能滿足我們日常開發的需要,這個時候就需要自己寫一套過濾的規則。
自定義過濾器可以在controller中直接以函數的形式定義,也可以在module后面定義,如:
angular.module('caseApp').filter("test",function(){
? return function(data){
? ? return data
? }
})
自定義的過濾器我就上兩個我自己在項目中使用的例子來演示
1,直接以函數的形式定義的過濾器,作用去重復。
angular.module("test").controller("testCtrl",["$scope",function($scope){
$scope.arr=[
? {id:1},
? {id:2},
? {id:3},
? {id:4},
]
$scope.arr_f=[
? {id:3},
? {id:1}
]
$scope.filter1=function(item){
?for(var i=0;i<arr.length;i++){
? ? if(arr[i].id==item.id){
? ? ? ? return
? ? }
}
return item
}])
html:
<ul>
? <li ng-repeat="item inarr | filter:filter1">{{item.id}}</li>
</ul>
輸出:2,4
本例是直接使用函數作為過濾器規則,這種只適用于過濾數組時使用,過濾函數所接收的值為repeat每一項的值,所以例子中有相同的則返回空,沒有相同的則返回當前本省。
2,以.filter形式定義的過濾器,作用統計數量
angular.module("test").controller("testCtrl",["$scope",function($scope){
$scope.arr=[
? {class:1},
? {class:2},
? {class:1},
? {class:3},
? {class:1},
? {class:2},
? {class:1},
? {class:2}
]
]})
.filter('filter2',function () {
return function (data,key) {
? var sum=0;
? for(var i=0;i<data.length;i++){
? if(data[i][key]==1){
? ? sum=sum+1
? }
? }
return sum
}}
html:{{arr | filter2:"class"}}
輸出:4
本例過濾器用來統計數據中某項值非常的方便。并且.filter形式的過濾器會把整個數據傳進來,可以在過濾函數中把數據重新整合成自己需要的數據形式,基本就可以滿足絕大多數用戶的需求了~