
在vue1.x版本里是自帶里幾個基礎(chǔ)的過濾器的(雖然不怎么用到)。
到了vue2.x版本之后,內(nèi)置到幾個過濾器就被刪掉了,如果需要用到過濾器,就要開發(fā)者自己去定義。
可以把過濾器定義在某個組件內(nèi)部,但這樣就成了局部過濾器,在別的組件里是無法使用的。所以通常不會這么做。
也可以把過濾器寫在main.js里。但如果項(xiàng)目中存在多個過濾器,這會使main.js文件看上去很龐大,不便于后期維護(hù)。
所以通常會新建一個js文件,專門用來存放所有過濾器。最后再引到main.js中供全局使用。
1、創(chuàng)建 filters.js
首先新建一個filters.js文件。把這個文件放在 src/assets 里。

因?yàn)檫@里是用來存放靜態(tài)資源的。這個文件夾可以用來存放圖片、css和部分自定義的功能的js資源。如果需要更好的分類,可以在 assets 文件夾里再創(chuàng)建 js 、 css 、 img 等文件夾。
2、創(chuàng)建過濾器規(guī)則
這里我創(chuàng)建了3個過濾器
// 轉(zhuǎn)小寫let lower = value => value.toLowerCase();// 轉(zhuǎn)大寫let upper = value => value.toUpperCase();let currencyStyle = (value, style) => { // 貨幣格式 /** * style: * currency:貨幣 * number: 數(shù)字格式 */ if(style == 'number') { // 數(shù)字格式 return parseFloat(value.replace(/[^/d/.-]/g, "")); } else { // 貨幣格式, 并保留2位小數(shù) var n = 2; value = parseFloat((value + "").replace(/[^/d/.-]/g, "")).toFixed(n) + ""; var l = value.split(".")[0].split("").reverse(), r = value.split(".")[1]; var t = ""; for (var i = 0; i < l.length; i++) { t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? "," : ""); } return t.split("").reverse().join("") + "." + r; }}export { lower, upper, currencyStyle}3、在main.js里注冊全局過濾器
import Vue from 'vue'import App from './App.vue'import * as filters from './assets/filters'Object.keys(filters).forEach(key => { Vue.filter(key, filters[key])})Vue.config.productionTip = falsenew Vue({ render: h => h(App),}).$mount('#app')通過 forEach 循環(huán),把自定義功能分別注冊到過濾器里。
4、在組件里使用
<template> <div id="app"> <p>{{ num1 | currencyStyle('currency') }}</p> <p>{{ num2 | currencyStyle('number') }}</p> <p>{{ msg1 | lower }}</p> <p>{{ msg2 | upper }}</p> </div></template><script>export default { name: 'app', data() { return { num1: 123456, num2: '123,456', msg1: 'ABC', msg2: 'def' } }}</script>
總結(jié)
以上所述是小編給大家介紹的vue-cli 3 全局過濾器的實(shí)例代碼詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對武林網(wǎng)網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
新聞熱點(diǎn)
疑難解答