Vue的過(guò)濾器(filters)函數(shù)用法示例
在 Vue 中,過(guò)濾器(filters)是一種特殊的函數(shù),主要用于對(duì)文本數(shù)據(jù)進(jìn)行格式化處理,比如轉(zhuǎn)換大小寫(xiě)、日期格式化、貨幣格式化等。
1. 局部過(guò)濾器
你可以在組件內(nèi)部定義過(guò)濾器,這樣它就只在當(dāng)前組件中有效。
export default {
data() {
return {
price: 99.9
}
},
// 定義局部過(guò)濾器
filters: {
currency(value) {
if (typeof value !== 'number') {
return value;
}
return '¥' + value.toFixed(2);
}
}
}在模板中使用過(guò)濾器:
<template>
<div>
<!-- 輸出:¥99.90 -->
<p>{{ price | currency }}</p>
</div>
</template>2. 全局過(guò)濾器
若要讓過(guò)濾器在所有組件中都能使用,可將其定義為全局過(guò)濾器。通常在創(chuàng)建 Vue 實(shí)例之前定義全局過(guò)濾器。
import Vue from 'vue';
// 定義全局過(guò)濾器
Vue.filter('uppercase', function(value) {
if (!value) return '';
return value.toString().toUpperCase();
});
// 創(chuàng)建 Vue 實(shí)例
new Vue({
// ...
});在任意組件的模板中使用全局過(guò)濾器:
<template>
<div>
<!-- 輸出:HELLO WORLD -->
<p>{{ message | uppercase }}</p>
</div>
</template>3. 過(guò)濾器串聯(lián)
Vue 過(guò)濾器支持串聯(lián)使用,也就是一個(gè)值可以依次通過(guò)多個(gè)過(guò)濾器進(jìn)行處理。
過(guò)濾器串聯(lián)的順序是從左到右依次執(zhí)行的,因此寫(xiě)入模板的先后順序會(huì)直接影響最終結(jié)果。
filters: {
currency(value) {
return '¥' + value.toFixed(2);
},
discount(value, rate) {
return value * (rate || 1);
}
}在模板中串聯(lián)使用過(guò)濾器:
<template>
<div>
<!-- 輸出:¥79.92 -->
<p>{{ 99.9 | discount(0.8) | currency }}</p>
</div>
</template>4. 過(guò)濾器傳參
過(guò)濾器可以接收額外的參數(shù),從而實(shí)現(xiàn)更靈活的格式化。
import dayjs from 'dayjs';
……
filters: {
formatDate(value, format = 'YYYY-MM-DD') {
// 這里可以使用日期庫(kù)如 day.js 進(jìn)行格式化
return dayjs(value).format(format)
}
}在模板中傳遞參數(shù)給過(guò)濾器:
<template>
<div>
<!-- 輸出:2023/10/15 -->
<p>{{ date | formatDate('YYYY/MM/DD') }}</p>
</div>
</template>5. Vue 3 中的變化
在 Vue 3 里,過(guò)濾器已被移除,官方推薦使用計(jì)算屬性(computed)或者方法(methods)來(lái)替代過(guò)濾器的功能。
export default {
data() {
return {
price: 99.9
}
},
computed: {
formattedPrice() {
return '¥' + this.price.toFixed(2);
}
}
}在模板中使用計(jì)算屬性替代過(guò)濾器:
<template>
<div>
<!-- 輸出:¥99.90 -->
<p>{{ formattedPrice }}</p>
</div>
</template>Vue 3 移除過(guò)濾器(filters)主要基于以下幾個(gè)原因:
1) 語(yǔ)法一致性與冗余性
- 過(guò)濾器本質(zhì)上是一種特殊的語(yǔ)法糖,其功能可以被計(jì)算屬性(computed)或方法(methods)完全替代。
- 移除過(guò)濾器減少了學(xué)習(xí)成本和語(yǔ)法復(fù)雜度,保持了 "一個(gè)功能只對(duì)應(yīng)一種實(shí)現(xiàn)方式" 的設(shè)計(jì)原則。
2)組合式 API 的興起
- Vue 3 主推的組合式 API(Composition API)更強(qiáng)調(diào)邏輯復(fù)用和代碼組織,過(guò)濾器在這種范式下顯得格格不入。
- 過(guò)濾器只能在模板中使用,而計(jì)算屬性和方法可以在 setup () 函數(shù)中定義,更好地與組合式 API 集成。
3)類型推導(dǎo)與 IDE 支持
- 過(guò)濾器的類型推導(dǎo)較為困難,尤其是在 TypeScript 環(huán)境下。
- 計(jì)算屬性和方法作為普通 JavaScript 函數(shù),更容易被類型系統(tǒng)和 IDE 正確識(shí)別。
4)性能優(yōu)化
- 過(guò)濾器的實(shí)現(xiàn)需要額外的運(yùn)行時(shí)開(kāi)銷,移除后可以簡(jiǎn)化編譯過(guò)程和渲染邏輯。
總結(jié)
到此這篇關(guān)于Vue的過(guò)濾器(filters)函數(shù)用法的文章就介紹到這了,更多相關(guān)Vue 過(guò)濾器filters函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue-cli3項(xiàng)目配置eslint代碼規(guī)范的完整步驟
這篇文章主要給大家介紹了關(guān)于vue-cli3項(xiàng)目配置eslint代碼規(guī)范的完整步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
vue實(shí)現(xiàn)三級(jí)頁(yè)面跳轉(zhuǎn)功能
這篇文章主要介紹了vue實(shí)現(xiàn)三級(jí)頁(yè)面跳轉(zhuǎn)功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05
vue實(shí)現(xiàn)web滾動(dòng)條分頁(yè)
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)web滾動(dòng)條分頁(yè),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04
Vue3?watchEffect的使用教程和相關(guān)概念
Vue?3?引入了?Composition?API,其中?watchEffect?是一個(gè)非常強(qiáng)大的工具,用于響應(yīng)式地追蹤依賴項(xiàng)的變化,本文將詳細(xì)介紹?watchEffect?的使用方法和相關(guān)概念,文中有詳細(xì)的代碼供大家參考,需要的朋友可以參考下2024-08-08
vue2如何使用vue-i18n搭建多語(yǔ)言切換環(huán)境
這篇文章主要介紹了vue2-使用vue-i18n搭建多語(yǔ)言切換環(huán)境的相關(guān)知識(shí),在data(){}中獲取的變量存在更新this.$i18n.locale的值時(shí)無(wú)法自動(dòng)切換的問(wèn)題,需要刷新頁(yè)面才能切換語(yǔ)言,感興趣的朋友一起看看吧2023-12-12
Vue3新特性Suspense和Teleport應(yīng)用場(chǎng)景分析
本文介紹了Vue2和Vue3中的Suspense用于處理異步請(qǐng)求的加載提示,以及如何在組件間實(shí)現(xiàn)動(dòng)態(tài)加載,同時(shí),Teleport技術(shù)展示了如何在DOM中靈活地控制組件的渲染位置,解決布局問(wèn)題,感興趣的朋友跟隨小編一起看看吧2024-07-07
vue實(shí)現(xiàn)標(biāo)簽云效果的示例
這篇文章主要介紹了vue實(shí)現(xiàn)標(biāo)簽云效果的示例,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下2020-11-11
使用Vue3+ts?開(kāi)發(fā)ProTable源碼教程示例
這篇文章主要為大家介紹了使用Vue3+ts?開(kāi)發(fā)ProTable源碼示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
vue實(shí)現(xiàn)點(diǎn)擊隱藏與顯示實(shí)例分享
在本篇文章中小編給大家分享了vue如何實(shí)現(xiàn)點(diǎn)擊隱藏與顯示的相關(guān)內(nèi)容,有需要的朋友們跟著學(xué)習(xí)下。2019-02-02

