深究AngularJS——過濾器(filter)
阿新 • • 發佈:2019-01-31
寫這個的目的是希望能學會如何在指令里加入自己的過濾器。
1.關於過濾器你需要了解這些
1.過濾器的作用:
是將我們的現有的資料進行處理,比如重排序、轉換大小寫、計算等等,處理完了再返回一個結果。
2.AngularJS自帶的過濾器:
過濾器 | 描述 |
---|---|
currency | 格式化數字為貨幣格式。 |
filter | 從陣列項中選擇一個子集。 |
lowercase | 格式化字串為小寫。 |
orderBy | 根據某個欄位屬性重新排序。 |
uppercase | 格式化字串為大寫。 |
3.使用過濾器:
可在如下三個地方使用過濾器,在頁面上使用時,通過一個管道符(|)和過濾器名字,
<body>
<div ng-app="myApp" ng-controller="myCtrl">
<!-- 1.在表示式中使用過濾器 -->
<h1>{{"xywz" | uppercase}}</h1>
<!-- 2.在指令中使用過濾器 -->
<p ng-repeat="r in data |orderBy :'time'">{{r.result}}</p>
</div>
<script>
var app = angular.module('myApp' , []);
//3.控制器中使用過濾器
app.controller('myCtrl', function($scope, $filter) {
$scope.data = [{'time':2014,'result':'賺錢了'},{'time':2015,'result':'虧大發了'}] ;
console.log($filter("orderBy")($scope.data,"time"));
});
</script>
</body>
2.如何寫自己的過濾器(關鍵)
我以一個將字串折分成陣列的過濾器舉例。在頁面上需要傳兩引數時,就在過濾器後面以冒號(:)隔開,如下面要傳的分割器;在頁面要實現傳三個及以上的引數時,我們可以通過在過濾器後面繼續加冒號( :) 和引數的格式新增。總結就是,第一個引數是管道符號前面的資料,多個引數時,在過濾器名稱後面以冒號隔開
<body>
<div ng-app="myApp" ng-controller="myCtrl">
<p ng-repeat="r in data | toArray">{{r}}</p>
<p ng-repeat="r in data2 | toArray:';'">{{r}}</p>
</div>
<script>
var app = angular.module('myApp', []);
//控制器
app.controller('myCtrl', function($scope, $filter) {
$scope.data ="abc,mn,大山,綠水";
$scope.data2 ="abc;mn;大山;綠水";//需要給定分割器
});
//將字串分割成陣列
app.filter("toArray",function(){
return function(data,separator){
if(data){
if(!separator) {
separator = ",";//預設逗號分割
}
return data.split(separator);
}else{
return [];//得到的結果型別始終為陣列型別 }
}
});
</script>
</body>
3.過濾器中注入服務
<body>
<div ng-app="myApp">
在過濾器中使用服務:
<h1>{{255 | myFormat}}</h1>
</div>
<script>
var app = angular.module('myApp', []);
//自定義服務
app.service('hexafy', function() {
this.myFunc = function (x) {
return x.toString(16);
}
});
//過濾器
app.filter('myFormat',['hexafy', function(hexafy) {
return function(x) {
return hexafy.myFunc(x);
};
}]);
</script>
</body>