AngularJS之Filter
前言
本節我們來講講AngularJS中主要的部分之一,那就是過濾器,當從後臺獲取到的資料呈現到檢視上時,此時可能需要對資料進行相應的轉換,此時我們可以透過過濾器在不同頁面進行不同資料的格式抓換,在AngularJS中有常見預設的過濾器,當然若不滿足所需,我們可以自定義過濾器。
AngularJS預設過濾器
列舉AngularJS中常見的過濾器,如下:
過濾器名稱 | 描述 | 例子 | |
currency | money格式化 | {{ p.price | currency}} | |
date | 日期格式化 | { p.orderDate | date : “dd MMM yyyy” }} {{ p.orderDate | date : “shortDate” }} |
|
json | 將JSON字串生成一個JSON物件 | ||
{{p | json}} | |||
number | 格式化數值並給出精確度位數 | {{ p.price | number : 0}} {{ p.price | number : 2}} |
|
uppercase lowercase |
大小寫轉換 | {{ p.city | lowercase }} {{ p.state | uppercase }} |
|
limitTo | 控制列表渲染資料 | ||
orderBy | 排序 | ||
預設過濾器示例
我們渲染一個產品列表並將產品名稱轉換為大寫,產品類別小寫,以及數量保留兩位小數等。
UI
產品個數 {{products.length}}
名稱 類別 供給日期 數量 價格 {{p.name | uppercase}} {{p.category | lowercase}} {{getExpiryDate(p.expiry) | date:"dd MMM yy"}} {{p.quantity | number:2 }} {{p.price | currency}}
JS
app.controller('FilterCtrl', function ($scope) { $scope.products = [ { name: "Sony LED", category: "TV", price: 40000, quantity:10, expiry: 30 }, { name: "Vivo xplay5", category: "Mobile", price: 35640, quantity: 08, expiry: 21 }, { name: "LeTv", category: "TV", price: 36000, quantity: 5, expiry: 50 }, { name: "Iphone 6 plus", category: "Mobile", price: 55000, quantity: 6, expiry: 60 }, { name: "Galaxy s7 edge", category: "Mobile", price: 45000, quantity: 15, expiry: 50 }, ]; $scope.getExpiryDate = function (days) { var now = new Date(); return now.setDate(now.getDate() + days); } });
最後生成如下:
自定義過濾器示例
AngularJS不僅僅支援內部自構建的過濾器,而且還可以自定義過濾器來滿足我們所需,若自定義過濾器此時我們需要 透過module.filter來實現,實際上內部是透過FilterProvider來實現。module.filter這個方法有兩個引數,一個是需要建立的過濾器的名稱,另外一個是建立一個factory函式來使得該自定義過濾器生效或者工作。
接下來我們實現一個自定義過濾器,該過濾器帶一個引數,實現了再對照程式碼就明朗了。如下:
app.filter("properCase", function () { return function (value, reverse) { if (angular.isString(value)) { var intermediate = reverse == false ? value.toUpperCase() : value.toLowerCase(); return (reverse == false ? intermediate[0].toLowerCase() : intermediate[0].toUpperCase()) + intermediate.substr(1); } else { return value; } }; });
接下來在檢視中將繫結的名稱和類別修改成如下:
{{p.name | properCase}} {{p.category | properCase : false}}
結果如下:
混合過濾器示例
當進行渲染資料時,有可能需要進行多次過濾此時我們就需要建立多個自定義過濾器或者內建過濾器和自定義過濾器混合使用。
我們首先對列表透過name來orderby一下,然後透過自定義過濾器移除前兩條資料。
app.filter("skipRec", function () { return function (data, count) { if (angular.isArray(data) && angular.isNumber(count)) { if (count > data.length || count此時檢視頁面迴圈列表時我們將修改成如下:
....... 最終我們得到的結果如下:
總結
本節我們學習了AngularJS的過濾器,然後對預設過濾器、自定義過濾器以及混合過濾器統一進了相應的示例說明來加深理解,我們下節再見。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3486/viewspace-2800509/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- AngularJS Filter用法詳解AngularJSFilter
- 走進AngularJs(七) 過濾器(filter)AngularJS過濾器Filter
- AngularJS教程二十一—— 過濾器(filter)AngularJS過濾器Filter
- oracle全文索引之FILTER_4_PROCEDURE_FILTEROracle索引Filter
- oracle全文索引之FILTER_1_NULL_FILTEROracle索引FilterNull
- AngularJS核心之DirectiveAngularJS
- oracle全文索引之FILTER_2_INSO_FILTEROracle索引Filter
- angularJS之$apply()方法AngularJSAPP
- angularjs之$timeout指令AngularJS
- javaweb之Filter詳解(轉)JavaWebFilter
- AngularJS們的SEO之殤AngularJS
- Tomcat Filter之動態注入TomcatFilter
- spring cloud gateway之filter篇SpringCloudGatewayFilter
- Logstash詳解之——filter模組Filter
- 【轉】ionic之AngularJS手勢事件AngularJS事件
- AngularJS之Scope及ControllerAngularJSController
- Elasticsearch 之 Filter 與 Query 有啥不同?ElasticsearchFilter
- dubbo原始碼系列之filter的前生原始碼Filter
- 體驗jQuery和AngularJS的不同點以及AngularJS的迷人之處jQueryAngularJS
- HBase Filter 過濾器之 ValueFilter 詳解Filter過濾器
- Java安全之Filter許可權繞過JavaFilter
- Angularjs——初識AngularJSAngularJS
- angularJS之$watch、$digest和$apply方法AngularJSAPP
- 理解Swift高階函式之map, filter, reduceSwift函式Filter
- JavaWeb開發之Filter中的dispatcher標籤JavaWebFilter
- Asp.Net MVC 系列--進階篇之FilterASP.NETMVCFilter
- Transformation之FPD(filter push-down)的transform【一】ORMFilter
- 【SSO】--單點登入之過濾器(filter)過濾器Filter
- oracle全文索引之FILTER_3_FORMAT_COLUMNOracle索引FilterORM
- Spring Cloud Gateway實戰之五:內建filterSpringCloudGatewayFilter
- 探索C#之布隆過濾器(Bloom filter)C#過濾器OOMFilter
- angularJsAngularJS
- JavaScript filter()JavaScriptFilter
- Listener & FilterFilter
- jQuery filter()jQueryFilter
- Bag FilterFilter
- FILTER JOINFilter
- Utility FilterFilter