Vue過濾器的使用和總結(jié)

在這個教程中脐湾,我們將會通過幾個例子秤掌,了解和學習VueJs的過濾器鹰霍。我們參考了一些比較完善的過濾器,比如orderBy 和 filterBy孟岛。而且我們可以鏈式調(diào)用過濾器获黔,一個接一個過濾玷氏。因此,我們可以定義我們自己的過濾器在我們的Vue實例中盏触。

閱讀這個教程的前提是你對Vue已經(jīng)有了基本的語法基礎(chǔ)。

VueJs中的過濾器基礎(chǔ)

過濾器是一個通過輸入數(shù)據(jù)雌芽,能夠及時對數(shù)據(jù)進行處理并返回一個數(shù)據(jù)結(jié)果的簡單函數(shù)。Vue有很多很便利的過濾器淮腾,可以參考官方文檔屉佳,http://cn.vuejs.org/api/#過濾器,過濾器通常會使用管道標志 “ | ”圆凰, 比如:

{{ msg | uppercase? }}// 'abc' => 'ABC'

在上述的例子中专钉,在插值的時候累铅,使用了Vue的一個uppercase過濾器,msg可以是直接寫死回怜,寫成{{ ‘a(chǎn)bc’ | uppercase }}换薄,也可以利用用戶輸入來改變msg的值轻要。

uppercase過濾器 : 將輸入的字符串轉(zhuǎn)換成大寫字母的過濾器垦缅。

鏈式過濾

VueJs允許你鏈式調(diào)用過濾器,簡單的來說凡恍,就是一個過濾器的輸出成為下一個過濾器的輸入怔球,然后再次過濾。接下來闽巩,我們可以想象一個比較簡答的例子,使用了Vue的 filterBy + orderBy 過濾器來過濾所有商品products洼冻。過濾出來的產(chǎn)品是屬于電器類商品隅很,并且按電器字母排序。

filterBy過濾器 : 過濾器的值必須是一個數(shù)組普泡,filterBy + 過濾條件审编。過濾條件是:‘string || function’ + in ‘optionKeyName’

orderBy過濾器 : 過濾器的值必須是一個數(shù)組,orderBy + 過濾條件砰嘁。過濾條件是:‘string || array ||function’ + ‘order ≥ 0 為升序 || order < 0 為降序’

接下來矮湘,我們可以看下第二個例子:我們有一個商品數(shù)組products口糕,我們希望遍歷這個數(shù)組,并把他們打印成一張清單景描,這個用v-for很容易實現(xiàn)超棺。

{{ product.name | capitalize }} - {{ product.price | currency }}

capitalize過濾器 : 將輸入的字符串首字母轉(zhuǎn)換成大寫字母的過濾器。currency過濾器 : 將輸入的數(shù)字轉(zhuǎn)換成現(xiàn)金的過濾器件相⊙醪裕可以跟上貨幣符號(默認$)和保留的小數(shù)位(默認2)让虐。

利用上面的兩個過濾器,能夠很好的把一個json數(shù)組的商品清單格式化成通熟易懂的商品價格清單澄干。

如果只想要電器類商品,可以在v-for上加過濾條件:

{{ product.name | capitalize }} - {{ product.price | currency }}

上面的例子惧笛,就是用filterBy 過濾在 'category'中含有'electronics' 關(guān)鍵字的列表逞泄,返回的列表就是只含有 'electronics' 關(guān)鍵字的列表。

如果想要多個搜索條件:


上面的例子各谚,就是用filterBy 過濾在 'category' 和 'name' 中含有'electronics' 關(guān)鍵字的列表昌渤。

最后我們還需要將這個列表用字母進行排序憔四。我們可以在 filterBy 過濾器的基礎(chǔ)上,鏈式調(diào)用orderBy 過濾器潜支。

    | filterBy 'electronics' in 'category'

    | orderBy? 'name' ">{{ product.name | capitalize }} - {{ product.price | currency }}

    orderBy 的排序方式默認是升序冗酿,如果想要降序裁替,只需要加一個小于0的參數(shù):

    | filterBy 'electronics' in 'category'

    | orderBy? 'name'? -1 ">

    自定義過濾器

    雖然VueJs給我們提供了很多強有力的過濾器妓羊,但有時候還是不夠。值得慶幸的,Vue給我們提供了一個干凈簡潔的方式來定義我們自己的過濾器净刮,之后我們就可以利用管道 “ | ” 來完成過濾硅则。

    定義一個全局的自定義過濾器,需要使用Vue.filter()構(gòu)造器暑认。這個構(gòu)造器需要兩個參數(shù)。

    Vue.filter() Constructor Parameters:

    1.filterId: 過濾器ID蘸际,用來做為你的過濾器的唯一標識粮彤;

    2.filter function: 過濾器函數(shù),用一個function來接收一個參數(shù)屿良,之后再將接收到的參數(shù)格式化為想要的數(shù)據(jù)結(jié)果尘惧。

    回到之前的例子:現(xiàn)在設(shè)想我們有一個網(wǎng)上商城褥伴,并給我們的所有商品打五折漾狼。

    為了完成這個例子逊躁,我們需要完成的是

    使用Vue.filter()構(gòu)造器創(chuàng)建一個過濾器叫做discount

    輸入商品的原價稽煤,能夠返回其打五折之后的折扣價

    Vue.filter('discount', function(value) {returnvalue*.5;? });newVue({? ? ? ? el :'body',? ? ? ? data : {? ? ? ? ? ? ? products : [? ? ? ? ? ? ? ? ? ? {name:'microphone', price:25, category:'electronics'},? ? ? ? ? ? ? ? ? ? {name:'laptop case', price:15, category:'accessories'},? ? ? ? ? ? ? ? ? ? {name:'screen cleaner', price:17, category:'accessories'},? ? ? ? ? ? ? ? ? ? {name:'laptop charger', price:70, category:'electronics'},? ? ? ? ? ? ? ? ? ? {name:'mouse', price:40, category:'electronics'},? ? ? ? ? ? ? ? ? ? {name:'earphones', price:20, category:'electronics'},? ? ? ? ? ? ? ? ? ? {name:'monitor', price:120, category:'electronics'}? ? ? ? ? ? ? ]? ? ? ? }? });

    現(xiàn)在就可以像使用Vue自帶的過濾器一樣使用自定義過濾器了

    {{ product.name | capitalize }} - {{ product.price | discount | currency }}

    上面的html代碼將會輸出打了五折之后的所有商品的清單列表轧简。

    那如果我們想要的是任意折扣呢匾二?我們應該在discount過濾器里增加一個折扣數(shù)值參數(shù)察藐,改造一下我們的過濾器。

    Vue.filter('discount', function(value,discount) {returnvalue* ( discount /100) ;? });

    然后重新調(diào)用我們的過濾器

    {{ product.name | capitalize }} - {{ product.price | discount 25 | currency }}

    我們也可以在我們Vue實例里構(gòu)造我們的過濾器悴务,這樣構(gòu)造的好處是讯檐,這樣就不會影響到其他不需要用到這個過濾器的Vue實例别洪。

    newVue({el:'body',? ? ? ? data : {? ? ? ? ? ? ? products : [? ? ? ? ? ? ? ? ? ? {name:'microphone', price:25, category:'electronics'},{name:'laptop case', price:15, category:'accessories'},{name:'screen cleaner', price:17, category:'accessories'},{name:'laptop charger', price:70, category:'electronics'},{name:'mouse', price:40, category:'electronics'},{name:'earphones', price:20, category:'electronics'},{name:'monitor', price:120, category:'electronics'}]? ? ? ? },filters:{discount:function(value, discount){? ? ? ? ? ? ? ? ? ? return value * ( discount /100);}}? });

    定義在全局就能在所有的實例中調(diào)用過濾器特碳,如果定義在了實例里就在實例里調(diào)用過濾器晕换。

    結(jié)束語

    多虧了簡潔的管道過濾器構(gòu)造器,我們不僅可以調(diào)用它原生的過濾器益愈,也可以自定義屬于我們自己的過濾器夷家。但是Vue2.0好像把它去掉了库快。不過我想,如果是用1.0的朋友還是很需要用到過濾器的 : )

    最后編輯于
    ?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
    • 序言:七十年代末义屏,一起剝皮案震驚了整個濱河市靠汁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌闽铐,老刑警劉巖蝶怔,帶你破解...
      沈念sama閱讀 218,858評論 6 508
    • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異兄墅,居然都是意外死亡踢星,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
      沈念sama閱讀 93,372評論 3 395
    • 文/潘曉璐 我一進店門隙咸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沐悦,“玉大人,你說我怎么就攤上這事扎瓶∷唬” “怎么了?”我有些...
      開封第一講書人閱讀 165,282評論 0 356
    • 文/不壞的土叔 我叫張陵误证,是天一觀的道長遏考。 經(jīng)常有香客問我,道長譬巫,這世上最難降的妖魔是什么? 我笑而不...
      開封第一講書人閱讀 58,842評論 1 295
    • 正文 為了忘掉前任,我火速辦了婚禮焙蹭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘烟馅。我一直安慰自己,他們只是感情好,可當我...
      茶點故事閱讀 67,857評論 6 392
    • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著变抽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪塔沃。 梳的紋絲不亂的頭發(fā)上,一...
      開封第一講書人閱讀 51,679評論 1 305
    • 那天,我揣著相機與錄音,去河邊找鬼弄企。 笑死,一個胖子當著我的面吹牛约素,可吹牛的內(nèi)容都是我干的圣猎。 我是一名探鬼主播,決...
      沈念sama閱讀 40,406評論 3 418
    • 文/蒼蘭香墨 我猛地睜開眼洁段,長吁一口氣:“原來是場噩夢啊……” “哼疾呻!你這毒婦竟也來了憾赁?” 一聲冷哼從身側(cè)響起蟆肆,我...
      開封第一講書人閱讀 39,311評論 0 276
    • 序言:老撾萬榮一對情侶失蹤蛇损,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后更啄,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
      沈念sama閱讀 45,767評論 1 315
    • 正文 獨居荒郊野嶺守林人離奇死亡岩灭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
      茶點故事閱讀 37,945評論 3 336
    • 正文 我和宋清朗相戀三年膨更,在試婚紗的時候發(fā)現(xiàn)自己被綠了珍德。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片敞贡。...
      茶點故事閱讀 40,090評論 1 350
    • 序言:一個原本活蹦亂跳的男人離奇死亡击孩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出括蝠,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
      沈念sama閱讀 35,785評論 5 346
    • 正文 年R本政府宣布,位于F島的核電站婆跑,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拐纱,卻給世界環(huán)境...
      茶點故事閱讀 41,420評論 3 331
    • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧寞蚌,春花似錦抄伍、人聲如沸。這莊子的主人今日做“春日...
      開封第一講書人閱讀 31,988評論 0 22
    • 文/蒼蘭香墨 我抬頭看了看天上的太陽牵敷。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
      開封第一講書人閱讀 33,101評論 1 271
    • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
      沈念sama閱讀 48,298評論 3 372
    • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親剑鞍。 傳聞我的和親對象是個殘疾皇子光戈,可洞房花燭夜當晚...
      茶點故事閱讀 45,033評論 2 355

    推薦閱讀更多精彩內(nèi)容