Vue封裝全局過濾器Filters的步驟
(PS:本文代碼在vue-cli3構(gòu)建的基礎(chǔ)vue項(xiàng)目之上進(jìn)行編寫:vue create my-project)
在前后端分離的項(xiàng)目中,經(jīng)常會(huì)有后臺(tái)返回的數(shù)據(jù)需要經(jīng)過處理才能顯示到頁面上的場景。
使用最多的場景就是日期/時(shí)間、數(shù)字、字符串的格式化處理,實(shí)際業(yè)務(wù)中可能還有更復(fù)雜的數(shù)據(jù)處理邏輯。
下面就拿封裝全局的處理數(shù)字和字符串的 filter 來展示 vue 如何 封裝全局filter 并統(tǒng)一處理。
一、定義/封裝過濾器
在 src目錄 下新建 filters目錄 用來專門存放全局過濾器,如果項(xiàng)目的過濾器過多,那么就要按類型分類。
如果項(xiàng)目需要前臺(tái)處理的數(shù)據(jù)不是太多,那么就在 filters目錄 下新建一個(gè) index.js 來存放所有的過濾器就足夠了。
index.js代碼如下:
// 封裝過濾器
// 過濾器的聲明可以有下列多種寫法
/**
* Number formatting by unit
* like 10000 => 10k
* @param {number} num
* @param {number} digits
* @return {string}
*/
function numberFormatter(num, digits) {
const si = [
{ value: 1e18, symbol: "E" },
{ value: 1e15, symbol: "P" },
{ value: 1e12, symbol: "T" },
{ value: 1e9, symbol: "G" },
{ value: 1e6, symbol: "M" },
{ value: 1e3, symbol: "k" }
];
for (let i = 0; i < si.length; i++) {
if (num >= si[i].value) {
return (num / si[i].value + 0.1).toFixed(digits).replace(/\.0+$|(\.[0-9]*[1-9])0+$/, '$1') + si[i].symbol
}
}
return num.toString();
}
/**
* Number formatting by thousand
* like 10000 => "10,000"
* @param {number} num
* @return {string}
*/
const toThousandFilter = function(num) {
return (+num || 0).toString().replace(/^-?\d+/g, m => m.replace(/(?=(?!\b)(\d{3})+$)/g, ','))
};
/**
* Upper case first char
* like "wenyuan" => "Wenyuan"
* @param {string} string
* @return {string}
*/
const uppercaseFirst = string => {
return string.charAt(0).toUpperCase() + string.slice(1);
};
export default {
numberFormatter,
toThousandFilter,
uppercaseFirst
};
二、注冊(cè)過濾器
然后在 main.js 中引入注冊(cè)即可使用:
import filters from "./filters"; // global filters
// register global utility filters
Object.keys(filters).forEach(key => {
Vue.filter(key, filters[key]);
});

三、在組件內(nèi)使用寫好的過濾器
在組件中使用:
<template>
<div class="home">
<img alt="Vue logo" src="../assets/logo.png"/>
<h1>score:{{ score | numberFormatter }}</h1>
<h1>score:{{ score | toThousandFilter }}</h1>
<h1>username:{{ username | uppercaseFirst }}</h1>
</div>
</template>
<script>
export default {
name: "home",
components: {},
data() {
return {
score: 1200000,
username: "wenyuan"
};
}
};
</script>
四、效果

五、可能的報(bào)錯(cuò)與注意點(diǎn)
在 main.js 中,要先定義過濾器, 再新建 vue 實(shí)例,否則會(huì)報(bào)Failed to resolve filter: xxx的錯(cuò)誤。
以上就是Vue封裝全局過濾器Filters的步驟的詳細(xì)內(nèi)容,更多關(guān)于vue封裝過濾器的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
尤雨溪開發(fā)vue?dev?server理解vite原理
這篇文章主要為大家介紹了尤雨溪開發(fā)的玩具vite,vue-dev-server來理解vite原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
vue中各選項(xiàng)及鉤子函數(shù)執(zhí)行順序詳解
今天小編就為大家分享一篇vue中各選項(xiàng)及鉤子函數(shù)執(zhí)行順序詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-08-08
Vue實(shí)現(xiàn)用戶自定義字段顯示數(shù)據(jù)的方法
今天小編就為大家分享一篇Vue實(shí)現(xiàn)用戶自定義字段顯示數(shù)據(jù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-08-08
解決vue.js 數(shù)據(jù)渲染成功仍報(bào)錯(cuò)的問題
今天小編就為大家分享一篇解決vue.js 數(shù)據(jù)渲染成功仍報(bào)錯(cuò)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-08-08

