angular中filter過濾器主要有兩個(gè)作用:格式化數(shù)據(jù)和過濾數(shù)據(jù)。filter組件共有以下幾種:1、currency 2、number 3、date 4、json 5、lowercase 6、uppercase 7、limitTo 8、orderBy 9、filter。
官方API:https://code.angularjs.org/1.4.0-rc.2/docs/api/ng/filter
一 、currency
{{ currency_expression | currency : symbol : fractionSize}}
currency的作用是將值轉(zhuǎn)換為精確小數(shù)點(diǎn)的數(shù)字,同時(shí)在前面添加貨幣符號(hào),如果值不能轉(zhuǎn)化為數(shù)字,會(huì)返回空字符
symbol:貨幣符號(hào),
fractionSize:精確小數(shù)位數(shù)
$scope.money = 126893.5564;

圖中我們可以看到currency默認(rèn)添加$符號(hào),精確2位小數(shù),會(huì)給數(shù)字添加逗號(hào)
二、number
currency已經(jīng)包含了number的功能了,同樣如果值不能轉(zhuǎn)換為數(shù)字,返回空,如果是無窮大返回“∞”
{{ number_expression | number : fractionSize}}
fractionSize:小數(shù)點(diǎn)位數(shù)

我們可以看到,number默認(rèn)精確了3位小數(shù)
currency和number精確小數(shù)時(shí)都會(huì)發(fā)生四舍五入
三、date
關(guān)于date的格式化一看官方API簡直嚇?biāo)廊?,真是太多了,我們就來關(guān)注一下我們會(huì)用到的,想了解更多的自己可以去看看文檔。
- yyyy:表示年份,如2016
- MM:表示月份,如06
- M:同樣表示月份,如6,和MM的區(qū)別是個(gè)位數(shù)月份時(shí)前面沒有0,其他類似
- dd/d:表示天,如今天是06
- HH/H:表示小時(shí),24小時(shí)制
- hh/h:同樣表示小時(shí),12小時(shí)制
- mm/m:分鐘
- ss/s:秒
- sss:毫秒
- a :表示AM/PM,沒有它的話12小時(shí)制時(shí)我們怎么知道上午還是下午啊,當(dāng)然24小時(shí)制時(shí)仍然可以用它
$scope.today = new Date();

我們可以看到年、月、日、時(shí)間的順序是可以自行調(diào)的,連接符也是。之前犯二不解為什么有的是大寫字母有的是小寫字母,那是因?yàn)槟J(rèn)是小寫的,但是月份M和分鐘m沖突,所以才有大小寫混合了。。
四、uppercase、lowercase
這兩個(gè)確實(shí)沒什么好說的
$scope.str = 'Hello AngularJs';

五、limitTo
{{ limitTo_expression | limitTo : limit : begin}}
limit:截取長度
begin:開始位置
limitTo的作用類似于string的substr函數(shù),只不過參數(shù)顛倒了,注意是substr不是substring,
limitTo不僅可以用于字符串,也可以用于數(shù)組,此處僅以字符串舉例

六、orderBy
{{ orderBy_expression | orderBy : expression : reverse}}
orderBy的作用是按照某一規(guī)則給數(shù)組進(jìn)行排序,可以是普通數(shù)組,也可以是對象數(shù)組
$scope.items = [{id: 1001, name: '趙云', country: '蜀'}, {id: 1003, name: '關(guān)羽', country: '蜀'}, {id: 1002,name: '馬超',country: '蜀'}];

從例子2中我們可以看到,orderBy默認(rèn)按照對象id進(jìn)行了升序排序,例子3“-id”即按照id進(jìn)行了降序排序,而例子4可以看出
reverse為true的作用是反轉(zhuǎn)排序結(jié)果,JavaScript中也有reverse函數(shù)。普通數(shù)組也是可以的
{{[22,34,12,3,56]|orderBy:'':true}}

七、filter
終于到最后一個(gè)了,寫完就可以回家吃飯了。
看名字就知道filter是過濾作用啦~~還是直接舉例子吧

我們看到:
- 例子1中直接filter:"00"匹配到了所有數(shù)據(jù),那是因?yàn)閒ilter進(jìn)行的是模糊匹配,只要有一個(gè)屬性值含有”00“就會(huì)匹配到
- 例子2中用filter:{id:'1001'},不出我們所料這次只匹配到了id為1001的數(shù)據(jù),其實(shí)這里仍然是模糊匹配,如果我們把“1001”改成“001”你試試是不是仍會(huì)匹配到
- 忘記告訴item是啥了
$scope.item={}; $scope.item.id='001';
我們用了item.id和item.$進(jìn)行了匹配,這其實(shí)是一種更加靈活的方式,下一節(jié)中我們會(huì)用到。
八、In JavaScript
我們上面講的一些都是在html中使用過濾器,其實(shí)在JavaScript中也可以。
myApp.controller('filterCtr', ['$scope', '$filter', function ($scope, $filter) {}
我們要先注入$filter,然后我們再講一個(gè)新的過濾器-json
官方說json過濾器的作用就是為了調(diào)試用的,也是,要不然誰沒事把一個(gè)json字符串輸出到頁面干嘛。
我們來看一下它的效果:

是不是看起來方便多了。
類似的其他過濾器也能在函數(shù)里面用:
$scope.test = $filter('currency')(142, 'CNY', 5);其他類似,可以看看文檔,試一下。
而且filter過濾器還能自定義過濾函數(shù),功能會(huì)更加強(qiáng)大,類似于ECMAScript5中的filter函數(shù),快去看看。
總結(jié)
肚子好餓,我要吃飯去了
github代碼地址