如何使用vuejs過濾器

你們再使用vue作項目時,查詢功能固然必不可少,這就得使用vue強大的filter啦。其實vue內置的兩個屬性filterBy和orderBy已經能知足部分需求了,可是她更大的的魅力在於自定義filter(以後的文章中會分享),正好我最近作的項目中用到了這個。先給你們看下需求吧。以下圖,這是一個通信錄頁面,當咱們在搜索欄中輸入關鍵字時須要展現相應的員工,同時還得去掉A、B這樣的字母索引,而且輸入的關鍵字能夠是中文也能夠是拼音。vue

    

 

 

 該頁面引入搜索欄組件search-bar以及聯繫人組件user-list,這個搜索欄組件要作的事很簡單,由於咱們查詢的這個參數是動態的,因此只須要在vue上掛載一個v-model便可,而後它相對於這個頁面來講是子組件,父子傳值就得用props,因此還要用props接收一下,簡單寫下該組件你們看明白意思便可。數組

// 組件search-bar
<input type="search" v-model="okr_owner"/>

props: {
        okr_owner: {
            type: String
        }
}
// 通信錄頁面
<template>
    <search-bar :okr_owner.sync="key_word"></search-bar>
    <user-list :filter_key="key_word"></user-list>
</template>
// 組件 user-list
<li v-for="single_user in user_list.members | filterBy filter_key in 'user.u_name' 'okr_owner' | orderBy 'okr_owner'">
 props: {
        filter_flag: {
            type: Boolean
        },
        filter_key:{
            type: String
        }
}

 

而後咱們須要在該頁面引入這個搜索欄子組件,這裏我用到了sync,由於props只能父傳子,不能子傳父,可是咱們這上面引用了兩個組件,就是說搜索欄組件中的data要拿到聯繫人組件中來用,因此須要一個字段(key_word)將二者溝通起來,當咱們不寫sync時你們能夠看到,父的確傳值給子組件了,可是子組件中的okr_owner變化以後並無傳給父組件中的key_word,這樣聯繫人組件就接受不到數據源,因此咱們須要給他加上sync(雙向綁定,父傳子和子傳父),聯繫人組件中的filter才能夠生效。數據結構

在user-list組件中咱們須要遍歷聯繫人列表,filter_key用來傳給該組件,和搜索欄組件同樣,也用props接收一下,而且在裏面插入要過濾的內容,spa

filterBy是返回過濾後的數組,orderBy是排序,前者的使用方法是filterBy 一個key(字段),in xxx 就是指搜索字段,這裏須要注意的是in後面跟的必須是obj裏面的key,由於咱們的需求是同時保證輸入漢字或者拼音都能查詢,因此in後面跟的是okr_owner和user.u_name(這是vue渲染的數據,咱們展現該聯繫人用的是裏面的u_name,okr_owner則爲拼音),下面附上數據結構。對於在搜索時如何去掉這些字母索引,咱們只須要在通信錄頁面中的<user-list>加入一個字段,而後使用watch來監聽一下key_word便可。3d

相關文章
相關標籤/搜索