1. 程式人生 > >angularjs中的常見過濾器

angularjs中的常見過濾器

專案中使用了angularjs框架,使用到了裡面自帶過濾器,隨便就總結了一下angularjs中常見的過濾器。

一、什麼是過濾器?

過濾器用來格式化需要展示給使用者的資料。

AngularJS有很多實用的內建過濾器,同時也提供了方便的途徑可以自己建立過濾器。 在HTML中的模板繫結符號{{ }}內通過|符號來呼叫過濾器。

例如,假設我們希望將字串轉換成大寫,可以對字串中的每個字元都單獨進行轉換操作,也可以使用過濾器:

{{ name | uppercase }}

(1)JavaScript程式碼中可以通過$filter來呼叫過濾器。在JavaScript程式碼中使 lowercase 過濾器:

app.controller('DemoController',['$scope','$filter',function($scope,$fi lter){

$scope.name = $filter('lowercase')('Ari');

}]);

2)在HTML的形式使用過濾器時,如果需要傳遞引數給過濾器,只要在過濾器名字後面加冒號即可。如果有多個引數,可以在每個引數後面都加入冒號。例如,數值過濾器可以限制小數點 的位數,在過濾器後寫上:2,可以將2作為引數傳給過濾器:

<!-- 顯示:123.46 --> {{ 123.456789 | number:2 }}

可以用|符號作為分割符來同時使用多個過濾器。

二、常見的過濾器

1. currency  currecy過濾器可以將一個數值格式化為貨幣格式。

{{ 123 | currency }}來將123轉化 成貨幣格式。

currecy過濾器允許我們自己設定貨幣符號。預設情況下會採用客戶端所處區域的貨幣 符號, 但是也可以自定義貨幣符號。

2.date  date過濾器可以將日期格式化成需要的格式。

(1)  mediumDate格式,下面是內建的支援本地化的日期格式:

{{ today | date:'medium' }}         <!-- Aug 09, 2013 12:09:02 PM -->

 {{ today | date:'short' }}         <!-- 8/9/1312:09PM -->

{{ today | date:'fullDate' }}      <!-- Thursday, August 09, 2013 -->

{{ today | date:'longDate' }}   <!-- August 09, 2013 -->

{{ today | date:'mediumDate' }} <!-- Aug 09, 2013 -->

{{ today | date:'shortDate' }}   <!-- 8/9/13 -->

{{ today | date:'mediumTime' }} <!-- 12:09:02 PM -->

{{ today | date:'shortTime' }} <!-- 12:09 PM --> l

(2) 年份格式化

四位年份:{{ today | date:'yyyy' }}   <!-- 2013 -->

兩位年份:{{ today | date:'yy' }} <!-- 13 -->

一位年份:{{ today | date:'y' }} <!-- 2013 --> l

(3)月份格式化

英文月份:{{ today | date:'MMMM' }} <!-- August -->

英文月份簡寫:{{ today | date:'MMM' }} <!-- Aug -->

數字月份:{{ today |date:'MM' }} <!-- 08 -->

一年中的第幾個月份:{{ today |date:'M' }}  <!-- 8 --> l

(4)日期格式化

數字日期:{{ today|date:'dd' }} <!-- 09 -->

一個月中的第幾天:{{ today | date:'d' }} <!-- 9 -->

英文星期:{{ today | date:'EEEE' }}  <!-- Thursday -->

英文星期簡寫:{{ today | date:'EEE' }} <!-- Thu --> l

(5)小時格式化

24小時制數字小時:{{today|date:'HH'}}  <!--00-->

一天中的第幾個小時:{{today|date:'H'}} <!--0-->

 12小時制數字小時:{{today|date:'hh'}} <!--12-->

上午或下午的第幾個小時:{{today|date:'h'}} <!--12--> l

(6)分鐘格式化

數字分鐘數:{{ today | date:'mm' }} <!-- 09 -->

一個小時中的第幾分鐘:{{ today | date:'m' }} <!-- 9 --> l

(7)秒數格式化

數字秒數:{{ today | date:'ss' }} <!-- 02 -->

一分鐘內的第幾秒:{{ today | date:'s' }} <!-- 2 -->

毫秒數:{{ today | date:'.sss' }} <!-- .995 --> l

(8)字元格式化

上下午標識:{{ today | date:'a' }} <!-- AM -->

四位時區標識:{{ today | date:'Z' }} <!--- 0700 -->

(9)下面是一些自定義日期格式的示例:

{{ today | date:'MMMd, y' }} <!-- Aug9, 2013 -->

{{ today | date:'EEEE, d, M' }} <!-- Thursday, 9, 8-->

{{ today | date:'hh:mm:ss.sss' }} <!-- 12:09:02.995 -->

3. filter filter過濾器可以從給定陣列中選擇一個子集,並將其生成一個新陣列返回。

這個過濾器通常用來過濾需要進行展示的元素。例如,在做客戶端搜尋時,可以從一個數組中立刻過濾出所需 的結果。 這個過濾器的第一個引數可以是字串、物件或是一個用來從陣列中選擇元素的函式。

下面分情況介紹傳入不同型別的引數。 l

(1) 字串 返回所有包含這個字串的元素。

如果我們想返回不包含該字串的元素,在引數前加! 符號。 物件 AngularJS會將待過濾物件的屬性同這個物件中的同名屬性進行比較,如果屬性值是字串 就會判斷是否包含該字串。如果我們希望對全部屬性都進行對比,可以將$當作鍵名。函式 對每個元素都執行這個函式,返回非假值的元素會出現在新的陣列中並返回。

例如,用下面的過濾器可以選擇所有包含字母e的單詞:

{{ ['Ari','Lerner','Likes','To','Eat','Pizza'] | filter:'e' }} <!-- ["Lerner","Likes","Eat"] -->

(2)物件,可以使用上面提到的物件過濾器。

例如,如果有一個由people物件組成的 陣列,每個物件都含有他們喜歡吃的食物的列 表,

那麼可以用下面的形式進行過濾:

{{ [{ 'name': 'Ari', 'City': 'San Francisco', 'favorite food': 'Pizza' },

{'name': 'Nate','City': 'San Francisco','favorite food': 'indian food'}] | filter:{'favorite food': 'Pizza'} }} <!-- [{"name":"Ari","City":"SanFrancisco","favoritefood":"Pizza"}] --> ]

(3)也可以用自定義函式進行過濾(在這個例子中函式定義在$scope上):

{{ ['Ari','likes','to','travel'] | filter:isCapitalized }} <!-- ["Ari"] -->

 isCapitalized函式的功能是根據首字母是否為大寫返回true或false,

具體如下所示:

$scope.isCapitalized = function(str) { return str[0] == str[0].toUpperCase(); };

我們也可以給filter過濾器傳入第二個引數,用來指定預期值同實際值進行比較的方式。 第二個引數可以是以下三種情況之一。

l true 用angular.equals(expected, actual)對兩個值進行嚴格比較。

l false 進行區分大小寫的子字串比較。

4. json json過濾器可以將一個JSON或JavaScript物件轉換成字串。

{{ {'name': 'Ari', 'City': 'SanFrancisco'} | json }}

<!-- {  "name": "Ari",  "City": "San Francisco" } -->

5. limitTo limitTo過濾器會根據傳入的引數生成一個新的陣列或字串,新的陣列或字串的長度取決於傳入的引數,通過傳入引數的正負值來控制從前面還是從後面開始擷取。

如果傳入的長度值大於被運算元組或字串的長度,那麼整個陣列或字串都會被返回。

  (1) 擷取字串的前三個字元:

{{ San Francisco is very cloudy | limitTo:3 }} <!-- San -->

(2) 擷取字串的後的六個字元:

{{ San Francisco is very cloudy | limitTo:-6 }} <!-- cloudy -->

(3)對陣列也可以進行同樣的操作。返回陣列的第一個元素:

{{ ['a','b','c','d','e','f'] | limitTo:1 }} <!-- ["a"] -->

6. lowercase lowercase過濾器將字串轉為小寫。

{{ "San Francisco is very cloudy" | lowercase }}

<!-- san francisco is very cloudy -->

7. Number  number過濾器將數字格式化成文字。

它的第二個引數是可選的,用來控制小數點後擷取的位數。

如果傳入了一個非數字字元,會返會空字串。

{{ 123456789 | number }} <!-- 1,234,567,890 -->  

{{ 1.234567 | number:2 }}  <!-- 1.23 -->

 8. orderBy

orderBy過濾器可以用表示式對指定的陣列進行排序。

  orderBy可以接受兩個引數,第一個是必需的,第二個是可選的。 第一個引數是用來確 定陣列排序方向的謂詞。

  字串 對這個字串進行解析的結果將決定陣列元素的排序方向。我們可以傳入+或- 來強制進行升序或降序排列。 l

陣列 在排序表示式中使用陣列元素作為謂詞。對於與表示式結果並不嚴格相等的每 個元素,則使用第一個謂詞。 第二個引數用來控制排序的方向(是否逆向)。 例如,我們將下面的物件陣列用name欄位進行排序:

{{ [ { 'name': 'Ari','status': 'awake'},

{ 'name': 'Q', 'status': 'sleeping'},

{ 'name': 'Nate','status': 'awake'}]|orderBy:'name'}}

結果:

<!--[ {"name":"Ari","status":"awake"},

{"name":"Nate","status":"awake"},

{"name":"Q","status":"sleeping"} ] -->

對排序結果進行反轉。

例如,通過將第二個引數設定為true可以將排序結果進 行反轉:

{{ [{'name': 'Ari','status': 'awake'},

{'name': 'Q','status': 'sleeping' },

{ 'name': 'Nate',’ status':’capitalize’ }}