詳解AngularJS中自定義過濾器
過濾器(filter)正如其名,作用就是接收一個輸入,通過某個規(guī)則進(jìn)行處理,然后返回處理后的結(jié)果。主要用在數(shù)據(jù)的格式化上,例如獲取一個數(shù)組中的子集,對數(shù)組中的元素進(jìn)行排序等。ng內(nèi)置了一些過濾器,它們是:currency(貨幣)、date(日期)、filter(子串匹配)、json(格式化json對象)、limitTo(限制個數(shù))、lowercase(小寫)、uppercase(大寫)、number(數(shù)字)、orderBy(排序)??偣簿欧N。除此之外還可以自定義過濾器,這個就強(qiáng)大了,可以滿足任何要求的數(shù)據(jù)處理。
AngularJS中為我們提供了一些內(nèi)置的過濾器,這里列舉一些自定義過濾器的場景。
自定義過濾器,不帶參數(shù)
//過濾 不帶參數(shù) app.filter('ordinal', function () { return function (number) { if (isNaN(number) || number < 1) { return number; } else { var lastDigit = number % 10; if (lastDigit === 1) { return number + 'st' } else if (lastDigit === 2) { return number + 'nd' } else if (lastDigit === 3) { return number + 'rd' } else if (lastDigit > 3) { return number + 'th' } } } });
大致這樣使用:
{{777 | ordinal}}
過濾 帶參數(shù)
把某個位置上的字母轉(zhuǎn)換成大寫。
//過濾 帶參數(shù) app.filter('capitalize', function () { //input 需要過濾的元素 //char位置,索引減一 return function (input, char) { if (isNaN(input)) { //如果序號位置沒有設(shè)置,索引位置默認(rèn)是0 var char = char - 1 || 0; //把過濾元素索引位置上的字母轉(zhuǎn)換成大寫 var letter = input.charAt(char).toUpperCase(); var out = []; for (var i = 0; i < input.length; i++) { if (i == char) { out.push(letter); } else { out.push(input[i]); } } return out.join(''); } else { return input; } } });
大致這樣使用:
{{'seven' | capitalize:3}}
過濾集合
過濾出集合中滿足某種條件的元素。
var app = angular.module('filters', []); app.controller('demo', function ($scope) { $scope.languages = [ {name: 'C#', type: 'static'}, {name: 'PHP', type: 'dynamic'}, {name: 'Go', type: 'static'}, {name: 'JavaScript', type: 'dynamic'}, {name: 'Rust', type: 'static'} ]; }); //過濾集合 app.filter('staticLanguage', function () { return function (input) { var out = []; angular.forEach(input, function (language) { if (language.type === 'static') { out.push(language); } }); return out; } });
大致這樣使用:
<li ng-repeat="lang in languages | staticLanguage">{{lang.name}}</li>
過濾,帶多個參數(shù),做多件事
定義數(shù)字的顯示單位和顯示位置。
var app = angular.module('filters', []); app.controller('demo', function ($scope) { $scope.digit = 29.88; }); //過濾 做多件事 多個參賽 app.filter('customCurrency', function () { return function (input, symbol, place) { if (isNaN(input)) { return input; } else { //檢查symbol是否有實(shí)參 var symbol = symbol || '¥'; var place = place === undefined ? true : place; if(place===true){ return symbol+input; }else{ return input + symbol; } } } });
大致這樣使用:
<p><strong>Original:</strong></p> <ul><li>{{digit}}</li></ul> <p><strong>Custom Currency Filter</strong></p> <ul> <li>{{digit | customCurrency}} --Default</li> <li>{{digit | customCurrency:'元'}} --custom symbol</li> <li>{{digit | customCurrency:'元':false}} -- custom symbol and custom location</li> </ul>
filter的兩種使用方法
1. 在模板中使用filter
我們可以直接在{{}}中使用filter,跟在表達(dá)式后面用 | 分割,語法如下:
{{ expression | filter }}
也可以多個filter連用,上一個filter的輸出將作為下一個filter的輸入(怪不得這貨長的跟管道一個樣。。)
{{ expression | filter1 | filter2 | ... }}
filter可以接收參數(shù),參數(shù)用 : 進(jìn)行分割,如下:
{{ expression | filter:argument1:argument2:... }}
除了對{{}}中的數(shù)據(jù)進(jìn)行格式化,我們還可以在指令中使用filter,例如先對數(shù)組array進(jìn)行過濾處理,然后再循環(huán)輸出:
<span ng-repeat="a in array | filter ">
2. 在controller和service中使用filter
我們的js代碼中也可以使用過濾器,方式就是我們熟悉的依賴注入,例如我要在controller中使用currency過濾器,只需將它注入到該controller中即可,代碼如下:
app.controller('testC',function($scope,currencyFilter){ $scope.num = currencyFilter(123534); }
在模板中使用{{num}}就可以直接輸出 $123,534.00了!在服務(wù)中使用filter也是同樣的道理。
此時你可能會有疑惑,如果我要在controller中使用多個filter,難道要一個一個注入嗎,這豈不太費(fèi)勁了?小兄弟莫著急~ng提供了一個$filter服務(wù)可以來調(diào)用所需的filter,你只需注入一個$filter就夠了,使用方法如下:
app.controller('testC',function($scope,$filter){ $scope.num = $filter('currency')(123534); $scope.date = $filter('date')(new Date()); }
可以達(dá)到同樣的效果。好處是你可以方便使用不同的filter了。
- 詳解AngularJS中$filter過濾器使用(自定義過濾器)
- AngularJS使用Filter自定義過濾器控制ng-repeat去除重復(fù)功能示例
- AngularJS 自定義過濾器詳解及實(shí)例代碼
- AngularJS自定義過濾器用法經(jīng)典實(shí)例總結(jié)
- Angularjs 依賴壓縮及自定義過濾器寫法
- angularJs自定義過濾器實(shí)現(xiàn)手機(jī)號信息隱藏的方法
- AngularJS實(shí)現(xiàn)的自定義過濾器簡單示例
- 簡述angular自定義過濾器在頁面和控制器中的使用
- Angular.Js中過濾器filter與自定義過濾器filter實(shí)例詳解
- 詳解Angular的內(nèi)置過濾器和自定義過濾器【推薦】
- angularjs自定義過濾器demo示例
相關(guān)文章
angular ngClick阻止冒泡使用默認(rèn)行為的方法
這篇文章主要介紹了angular ngClick阻止冒泡使用默認(rèn)行為的方法,較為詳細(xì)的分析了AngularJS中ngClick事件執(zhí)行原理與阻止冒泡的實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-11-11利用Angularjs中模塊ui-route管理狀態(tài)的方法
這篇文章主要給大家介紹了如何用Angularjs中的模板ui-route來管理狀態(tài)的方法,文中通過示例代碼介紹的很詳細(xì),相信對大家的理解和學(xué)習(xí)具有一定的參考借鑒價值,有需要的朋友可以一起來學(xué)習(xí)學(xué)習(xí)。2016-12-12angular.foreach 循環(huán)方法使用指南
本文主要介紹了angular.foreach 循環(huán)方法使用格式及參數(shù),是篇非?;A(chǔ)的文章,與需要的小伙伴參考下2015-01-01AngularJS 實(shí)現(xiàn)點(diǎn)擊按鈕獲取驗(yàn)證碼功能實(shí)例代碼
本文通過實(shí)例代碼給大家介紹了AngularJS 實(shí)現(xiàn)點(diǎn)擊按鈕獲取驗(yàn)證碼功能,代碼簡單易懂,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-07-07Angular?服務(wù)器端渲染應(yīng)用常見的內(nèi)存泄漏問題小結(jié)
這篇文章主要介紹了Angular?服務(wù)器端渲染應(yīng)用一個常見的內(nèi)存泄漏問題,主要包括屏幕閃爍問題,出現(xiàn)閃爍的原因,在于 Angular 不知道如何重用它在服務(wù)器上成功渲染的內(nèi)容,本文給大家介紹的非常詳細(xì),需要的朋友一起學(xué)習(xí)下吧2022-06-06在Angular項(xiàng)目使用socket.io實(shí)現(xiàn)通信的方法
這篇文章主要介紹了在Angular項(xiàng)目使用socket.io實(shí)現(xiàn)通信的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01AngularJS實(shí)現(xiàn)的省市二級聯(lián)動功能示例【可對選項(xiàng)實(shí)現(xiàn)增刪】
這篇文章主要介紹了AngularJS實(shí)現(xiàn)的省市二級聯(lián)動功能,涉及事件監(jiān)聽、響應(yīng)及頁面元素動態(tài)操作相關(guān)技巧,此外還具備對選項(xiàng)進(jìn)行增刪的功能,需要的朋友可以參考下2017-10-10