但是那些都必須要再整理過,
因此先寫一篇無關痛癢的Filter吧~
Angular Js提供多種Filter可使用。
- Currency:用來將數字轉換成貨幣
- Date:轉換成特定日期格式
- Filter:篩選機制,有點像是AutoComplete
- Json:將物件轉換成Json字串。
- limitTo:限制輸出的長度
- lowercase、uppercase:轉換為大小寫
- number:轉換為數字格式,並決定小數點後位數。
- orderBy:排序,超強。
單純就是如字串般加在數值前面。
currency_expression :放數值或model
symbol:可放自訂的貨幣名稱
原始碼:
---------- Currency Sample ----------<br>
{{ currency_expression | currency[:symbol] }}
<input type="number" ng-model="amount" ng-init="amount=120"> <br>
default currency symbol ($): {{amount | currency}}<br>
custom currency identifier (TWD$): {{amount | currency:"TWD$"}}
範例:
---------- Currency Sample ----------
{{ currency_expression | currency[:symbol] }}
{{ currency_expression | currency[:symbol] }}
default currency symbol ($): {{amount | currency}}
custom currency identifier (TWD$): {{amount | currency:"TWD$"}}
Date 的使用很廣,若使用的input type為date的話就可以省去相當多的問題,
並且可以直接轉換。如果不是,input內必須輸入標準格式,才能正確有效的轉換為Date。
date_expression 有兩種格式:
- 1970-01-01開始至今的秒數ex.1288323623006
- 2013-12-05T02:47(Z)
format有超多,所以請點選連結參考format。
---------- Date Sample ----------<br>
{{ date_expression | date[:format]}}
<span ng-non-bindable>{{2013-12-05T02:47 | date:'medium'}}</span>:
{{'2013-12-05T02:47' | date:'medium'}}<br>
<input type="text" ng-model="dateModel" ng-init="dateModel='2013-12-05T02:47Z'">
{{dateModel | date:'yyyy-MM-dd HH:mm:ss Z'}}<br>
<span ng-non-bindable>{{1288323623006 | date:'MM/dd/yyyy @ h:mma'}}</span>:
{{'1288323623006' | date:'MM/dd/yyyy @ h:mma'}}<br>
範例:---------- Date Sample ----------
{{ date_expression | date[:format]}}
{{2013-12-05T02:47 | date:'medium'}}:{{ date_expression | date[:format]}}
{{'2013-12-05T02:47' | date:'medium'}}
{{dateModel | date:'yyyy-MM-dd HH:mm:ss Z'}}
{{1288323623006 | date:'MM/dd/yyyy @ h:mma'}}:
{{'1288323623006' | date:'MM/dd/yyyy @ h:mma'}}
Filter 提供了相當彈性的篩選機制,模糊比對的能力真的蠻強的。可以決定要篩選的欄位以及否要完全比對;相當好用。
array:目標array
expression:篩選對象
comparator:是否完全比對(bool)
原始碼:
<div ng-init="friends = [{name:'John', phone:'555-1276'},
{name:'Mary', phone:'800-BIG-MARY'},
{name:'Mike', phone:'555-4321'},
{name:'Adam', phone:'555-5678'},
{name:'Julie', phone:'555-8765'},
{name:'Juliette', phone:'555-5678'}]"></div>
<div ng-non-bindable>
---------- Filter Sample ----------<br>
{{ array| filter:expression:comparator }}<br>
</div>
<!-- 定義一個model為search, search.$代表mapping到model所有子項 -->
Any: <input ng-model="search.$"> <br>
<!-- 只搜尋name的話就必須輸入在model為search.name的textbox -->
Name only <input ng-model="search.name"><br>
Phone only <input ng-model="search.phone"><br>
<!-- 用來決定是否完整比對 -->
Equality <input type="checkbox" ng-model="strict"><br>
<table id="searchObjResults">
<tr><th>Name</th><th>Phone</th></tr>
<tr ng-repeat="friend in friends | filter:search:strict">
<td>{{friend.name}}</td>
<td>{{friend.phone}}</td>
</tr>
</table>
範例:---------- Filter Sample ----------
{{ array | filter:expression:comparator }}
{{ array | filter:expression:comparator }}
Any:
Name only
Phone only
Equality
| Name | Phone |
|---|---|
| {{friend.name}} | {{friend.phone}} |
Json 提供將物件轉換成Json字串,其實我還沒參透~參透再補充。
原始碼:
---------- Json Sample ----------<br>
{{ json_expression | json }}
<div ng-model="JsObjects" ng-init="JsObjects=[{name:'John', phone:'555-1276'},
{name:'Mary', phone:'800-BIG-MARY'},
{name:'Mike', phone:'555-4321'},
{name:'Adam', phone:'555-5678'},
{name:'Julie', phone:'555-8765'},
{name:'Juliette', phone:'555-5678'}]"></div>
<!-- 說是用來把Object轉成json字串的= = -->
<p>{{ JsObjects | json }}</p>範例:---------- Json Sample ----------
{{ json_expression | json }}
{{ JsObjects | json }}{{ json_expression | json }}
limitTo 則是決定輸出的長度。
limitTo_input:為原始輸入內容(可以為array)
limit則為:指定的長度。
原始碼:
---------- LimitTo Sample ----------<br>
{{ limitTo_input | LimitTo: limit}}
<div ng-model="arrayObject" ng-init="arrayObject=[
{id:1,name:'aaa'},
{id:2,name:'bbb'},
{id:3,name:'ccc'},
{id:4,name:'ddd'},
{id:5,name:'eee'}]"></div>
<div ng-model="stringObject" ng-init="stringObject='abcdefghijklm'"></div>
Limit {{arrayObject}} to : <input type="integer" ng-model="numLimit" ng-init="numLimit=3">
<!-- 只輸出前三項 -->
<p>Output arrayObject: {{ arrayObject | limitTo:numLimit }}</p>
Limit {{stringObject}} to: <input type="integer" ng-model="letterLimit" ng-init="letterLimit=3">
<!-- 只輸出前三項 -->
<p>Output stringObject: {{ stringObject | limitTo:letterLimit }}</p>
<hr>範例:
---------- LimitTo Sample ----------
{{ limitTo_input | LimitTo: limit}}
Limit {{arrayObject}} to : {{ limitTo_input | LimitTo: limit}}
Output arrayObject: {{ arrayObject | limitTo:numLimit }}
Limit {{stringObject}} to:
Output stringObject: {{ stringObject | limitTo:letterLimit }}
lowercase、uppercase 簡單易懂,就是將字母轉換成為小寫或大寫。
原始碼:
---------- lowercase uppercase Sample ----------<br>
{{ lowercase_expression | lowercase }}<br>
{{ uppercase_expression | uppercase }}
<div ng-model="str" ng-init="str='AbcDefGhiJKL'">
<!-- 轉換成小寫 -->
str was {{str}} after lowercase : {{str | lowercase }}<br>
<!-- 轉換成大寫 -->
str was {{str}} after lowercase : {{str | uppercase }}
</div>範例:---------- lowercase uppercase Sample ----------
{{ lowercase_expression | lowercase }}
{{ uppercase_expression | uppercase }}
{{ lowercase_expression | lowercase }}
{{ uppercase_expression | uppercase }}
str was {{str}} after lowercase : {{str | lowercase }}
str was {{str}} after lowercase : {{str | uppercase }}
str was {{str}} after lowercase : {{str | uppercase }}
number 可以把字串轉為數字,並決定要輸出小數點後幾位。
input:字串
fractionSize:小數點後幾位
原始碼:
---------- number Sample ----------<br>
{{ input | number[:fractionSize] }}
<div>
Enter number: <input ng-model='val' ng-init="val=123.456789"><br>
<!-- 可篩選是否為數字 -->
Default formatting: {{val | number}}<br>
<!-- 沒有小數點number:0 -->
No fractions: {{val | number:0}}<br>
<!-- 轉為負值-val,且小數點以後四位 number:4 -->
Negative number: {{-val | number:4}}
</div>範例:
---------- number Sample ----------
{{ input | number[:fractionSize] }}
{{ input | number[:fractionSize] }}
Enter number:
Default formatting: {{val | number}}
No fractions: {{val | number:0}}
Negative number: {{-val | number:4}}
Default formatting: {{val | number}}
No fractions: {{val | number:0}}
Negative number: {{-val | number:4}}
orderBy 可以排序欄位,亦可決定是否反序。
orderBy_array:排序的標的array
predicate:目標欄位。
reverse:是否反轉
原始碼:
---------- orderBy Sample ----------<br>
{{ orderBy_array | orderBy:predicate:reverse }}
<div ng-init="afriends=[{name:'a01',age:'14'},
{name:'a02',age:'36'},
{name:'a03',age:'55'},
{name:'b01',age:'86'},
{name:'b02',age:'94'},
{name:'b03',age:'76'},
{name:'c01',age:'65'},
{name:'c02',age:'44'},
{name:'c03',age:'26'}]"></div>
<div>
<!-- 排序的項目 -->
predicate = {{predicate}}; reverse = {{reverse}}<br>
<table>
<tr>
<th><a href="" ng-click="predicate='name';reverse=!reverse">name</a></th>
<th><a href="" ng-click="predicate='age';reverse=!reverse">age</a></th>
</tr>
<tr ng-repeat="friend in afriends | orderBy:predicate:reverse">
<td>{{friend.name}}</td>
<td>{{friend.age}}</td>
</tr>
</table>
</div>
範例:
---------- orderBy Sample ----------
{{ orderBy_array | orderBy:predicate:reverse }}
{{ orderBy_array | orderBy:predicate:reverse }}
沒有留言:
張貼留言