如何使用vue過濾器filter
概述
在 vue2.0 之前,是有內(nèi)置過濾器的,在2.0中已經(jīng)沒有內(nèi)置的過濾器了,但我們可以自定義過濾器。
關(guān)于 vue 過濾器,在官方文檔中是這樣說明的:
Vue.js 允許你自定義過濾器,可被用于一些常見的文本格式化。過濾器可以用在兩個地方:雙花括號插值和 v-bind 表達式 (后者從 2.1.0+ 開始支持)。過濾器應(yīng)該被添加在 JavaScript 表達式的尾部,由“管道”符號指示。
即過濾器是用來格式化數(shù)據(jù)的一個函數(shù)。過濾器不會修改原始數(shù)據(jù),它的作用是過濾數(shù)據(jù),就是對數(shù)據(jù)進行加工處理并返回處理后的數(shù)據(jù),比如做一些數(shù)據(jù)格式上的修改,狀態(tài)轉(zhuǎn)換等。
過濾器分為兩種
- 組件內(nèi)的過濾器(組件內(nèi)有效)
- 全局過濾器(所有組件共享)
定義過濾器
第一個參數(shù)是過濾器的名字
第二個參數(shù)是過濾器的功能函數(shù) (若不定義vue就不知道這個字符串是什么,有什么作用)。
過濾器的功能函數(shù)
- 聲明 function(data,argv1,argv2...){}
- 第一個參數(shù)是傳入的要過濾的數(shù)據(jù),即調(diào)用時管道符左邊的內(nèi)容。
- 第二個參數(shù)開始往后就是調(diào)用過濾器的時候傳入的參數(shù)。
過濾器的使用
先注冊,后使用
組件內(nèi) filters:{ 過濾器名: fn } fn 內(nèi)通過 return 返回最終的數(shù)據(jù)
全局 Vue.filter('過濾器名',fn) fn 內(nèi)通過 return 返回最終的數(shù)據(jù)
使用 {{ 數(shù)據(jù) | 過濾器名 }}
// 使用過濾器時需要添加管道符號( | )作為分隔,管道符 | 右邊是過濾器名稱,即文本的功能函數(shù) <!-- 在雙花括號中 --> {{ message | 過濾器名稱 }} <!-- 在 `v-bind` 中 --> <div v-bind:id="id | 過濾器名稱"></div>
自定義全局過濾器
Vue.filter('過濾器名稱', function(val) { // val表示要被處理的數(shù)據(jù) // 過濾器業(yè)務(wù)邏輯,要有返回值 }) <div>{{ msg | 過濾器名稱 }}</div> <div v-bind="msg | 過濾器名稱"></div>
局部過濾器
data () { return { msg: 'hello world' } }, //定義私用局部過濾器。只能在當前 vue 對象中使用 filters: { dataFormat: (msg, a) => { // msg表示要過濾的數(shù)據(jù),a表示傳入的參數(shù) return msg + a; } } <p>{{ msg | dataFormat('!')}}</p> // 結(jié)果: hello world!
注意事項
1.全局注冊時是 filter 沒有 s , 而組件過濾器是 filters,是有 s 的,雖然寫的時候沒有 s 也不報錯,但是過濾器是沒有效果的。
2.當全局過濾器和局部過濾器名字重復(fù)的時候,會以就近原則進行調(diào)用,即:局部過濾器優(yōu)先于全局過濾器被調(diào)用
3.一個表達式可以使用多個過濾器,其執(zhí)行順序從左往右,前一個過濾器的結(jié)果作為后一個過濾器的被處理數(shù)據(jù),所以要注意使用順序
熟悉 vue 的童鞋會知道,過濾器有時同methods、computed、watch一樣可以達到處理數(shù)據(jù)的目的,但又不能替代它們,因為它不能改變原始值。如果一個過濾器的內(nèi)部特別復(fù)雜,可以考慮把它寫成一個計算屬性,因為計算屬性本身帶有緩存,可復(fù)用性強,而過濾器一般用來做一些簡單的操作。
在實際開發(fā)中,全局的過濾器要比局部過濾器使用的更廣泛一些,說白了我們?yōu)槭裁匆褂眠^濾器,其實就跟使用函數(shù)是一樣,把一些方法封裝,供其它組件使用,這樣調(diào)用起來更方便也更快捷。
大家知道全局過濾器是在 main.js 中定義的,但萬一項目過大,有多個過濾器,那 main.js 就一堆代碼,為了項目模塊化,最好是有專門的目錄來統(tǒng)一存放這些過濾器,然后把處理函數(shù)給抽離出去,放在一個.js文件中,下邊通過示例代碼展示。
示例一(局部過濾器)
格式化時間或日期,補全指定位數(shù),不足個位數(shù)補0
// filter/index.js文件 export default { dateFormat: value => { const dt = new Date(value * 1000) const y = dt.getFullYear() const m = (dt.getMonth() + 1 + '').padStart(2, '0') // .padStart(指定位數(shù),"要補全的符號或值") const d = (dt.getDay() + '').padStart(2, '0') const hh = (dt.getHours() + '').padStart(2, '0') const mm = (dt.getMinutes() + '').padStart(2, '0') const ss = (dt.getSeconds() + '').padStart(2, '0') return `${y}-${m}-$vvxyksv9kd ${hh}:${mm}:${ss}` } } // 在 .vue 文件中使用局部過濾器 <script> import filters from '../filter' export default { ... ... filters: { ...filters }, data() { return {} } } </script> <div> 日期:{{ date | dateFormat }} </div>
示例二(全局過濾器)
通用字典項的回顯:比如性別男女或通用選擇是否,后端傳給我們的數(shù)據(jù)是0、1,我們需要在頁面上顯示男女或是否
// constants/dictionary.js 文件 export const GENDER_MENU = [ { code: 0, label: '男'}, { code: 1, label: '女'} ]; export const COMMON_MENU = [ { code: 0, label: '否'}, { code: 1, label: '是'} ]; export default { GENDER_MENU, COMMON_MENU }
filter / dict.js 文件
// filter/dict.js 文件 import Dict from '../constants/dictionary' export const genderMenu = { func: value => { const target = Dict.GENDER_MENU.filter(item => { return item.code = value; }) return target.length ? target[0].label : value; } } export const commonMenu = { func: value => { const target = Dict.COMMON_MENU.filter(item => { return item.code = value; }) return target.length ? target[0].label : value; } }
filter / index.js 文件
// filter/index.js 文件 import * as filters from './dict' // 導(dǎo)入過濾函數(shù) const Install = Vue => { // 導(dǎo)入的 filters 是一個對象,使用Object.keys()方法,得到一個由key組成的數(shù)組,遍歷數(shù)據(jù),讓key作為全局過濾器的名字,后邊的是key對應(yīng)的處理函數(shù),這樣在任何一個組件中都可以使用全局過濾器了 Object.keys(filters).forEach(key => { Vue.filter(key, filters[key].func) }) /* for(const _filter in filters) { Vue.filter(`${_filter}`, filters[_filter].func) } */ } export default Install
main.js 文件
// main.js 文件 ... ... import filters from './../filter/index' Vue.use(filters) ... ...
在.vue 文件中使用全局過濾器
// .vue 文件中使用全局過濾器 <p>性別:{{ gender | genderMenu }}</p>
以上就是如何使用vue過濾器filter的詳細內(nèi)容,更多關(guān)于vue過濾器filter的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Vue中v-on的基礎(chǔ)用法、參數(shù)傳遞和修飾符的示例詳解
使用v-on:click給button綁定監(jiān)聽事件以及回調(diào)函數(shù),@是v-on:的縮寫,也就是簡寫也可以使用@click,這篇文章主要介紹了Vue中v-on的基礎(chǔ)用法、參數(shù)傳遞和修飾符,需要的朋友可以參考下2022-08-08vue?eslint報錯error?"Component?name?"*****"
這篇文章主要給大家介紹了關(guān)于vue?eslint報錯error?“Component?name?“*****“?should?always?be?multi-word”的解決方法,文中通過圖文以及實例代碼介紹的非常詳細,需要的朋友可以參考下2022-09-09利用Vue Native構(gòu)建移動應(yīng)用的全過程記錄
VueNative是一個使用JavaScript構(gòu)建跨平臺原生移動應(yīng)用程序的框架m這篇文章主要給大家介紹了關(guān)于如何利用Vue Native構(gòu)建移動應(yīng)用的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2021-08-08vue3使用pdf.js來預(yù)覽文件的操作步驟(本地文件測試)
這篇文章主要介紹了vue3使用pdf.js來預(yù)覽文件的操作步驟(本地文件測試),文中通過代碼示例和圖文結(jié)合的方式給大家介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下2024-05-05Vue.js與 ASP.NET Core 服務(wù)端渲染功能整合
本文通過案例給大家詳細分析了ASP.NET Core 與 Vue.js 服務(wù)端渲染,需要的朋友可以參考下2017-11-11Vue報錯Module build failed: Error: Node&nb
這篇文章主要介紹了Vue報錯Module build failed: Error: Node Sass version 7.0.1 is incompatible with 4.0.0.解決方案,需要的朋友可以參考下2023-06-06使用echarts點擊按鈕從新渲染圖表并更新數(shù)據(jù)
這篇文章主要介紹了使用echarts點擊按鈕從新渲染圖表并更新數(shù)據(jù)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10