Vue.js 過濾器詳解

Vue.js 過濾器詳解

下面我將詳細講解Vue.js中過濾器的語法和使用注意事項,并提供一個完整的演示頁面。

過濾器基本概念

在Vue.js中,過濾器(Filters) 是用于文本格式化的功能,可以在雙花括號插值和v-bind表達式中使用。過濾器通過管道符(|)指示,主要用于簡單的文本轉換。

<!-- 基本語法 -->
{{ message | capitalize }}<!-- 鏈式調用 -->
{{ message | filterA | filterB }}<!-- 帶參數的過濾器 -->
{{ date | formatDate('YYYY-MM-DD') }}

過濾器語法詳解

1. 全局過濾器定義

Vue.filter('filterName', function(value, ...args) {// 處理邏輯return transformedValue;
});

2. 局部過濾器定義

new Vue({filters: {filterName(value, ...args) {// 處理邏輯return transformedValue;}}
});

3. 使用方式

<!-- 在插值中使用 -->
<p>{{ price | currency }}</p><!-- 在v-bind中使用 -->
<div v-bind:id="rawId | formatId"></div><!-- 鏈式調用 -->
<p>{{ text | trim | capitalize }}</p><!-- 帶參數 -->
<p>{{ now | dateFormat('YYYY年MM月DD日') }}</p>

過濾器注意事項

  1. 過濾器只用于文本轉換:適用于簡單的文本格式化,不應用于復雜的數據轉換
  2. 參數傳遞
    • 第一個參數始終是管道前的值
    • 后續參數是調用時傳入的參數
  3. 鏈式調用順序:從左到右執行,前一個過濾器的結果作為后一個過濾器的輸入
  4. 返回值:過濾器必須返回一個值
  5. Vue 3的變化:Vue 3中移除了過濾器,官方推薦使用方法或計算屬性替代
  6. 性能考慮:避免在過濾器中執行復雜操作,特別是大數據量時
  7. 作用域:過濾器函數內無法訪問組件實例(this為undefined)

完整演示示例

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Vue.js 過濾器詳解</title><script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script><style>* {box-sizing: border-box;margin: 0;padding: 0;font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;}body {background: linear-gradient(135deg, #6a11cb 0%, #2575fc 100%);min-height: 100vh;padding: 20px;color: #333;}.container {max-width: 1000px;margin: 40px auto;background: rgba(255, 255, 255, 0.95);border-radius: 15px;box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);overflow: hidden;}header {background: linear-gradient(90deg, #3498db, #2c3e50);color: white;padding: 30px 40px;text-align: center;}h1 {font-size: 2.5rem;margin-bottom: 10px;text-shadow: 2px 2px 4px rgba(0,0,0,0.3);}.subtitle {font-size: 1.2rem;opacity: 0.9;max-width: 700px;margin: 0 auto;}.content {display: flex;flex-wrap: wrap;padding: 30px;}.panel {flex: 1;min-width: 300px;padding: 25px;margin: 15px;background: white;border-radius: 10px;box-shadow: 0 5px 15px rgba(0, 0, 0, 0.08);transition: transform 0.3s ease;}.panel:hover {transform: translateY(-5px);}.panel h2 {color: #2c3e50;border-bottom: 2px solid #3498db;padding-bottom: 10px;margin-bottom: 20px;display: flex;align-items: center;}.panel h2 i {margin-right: 10px;color: #3498db;}.example {background: #f8f9fa;border-radius: 8px;padding: 20px;margin: 15px 0;border-left: 4px solid #3498db;}.input-group {margin-bottom: 20px;}label {display: block;margin-bottom: 8px;font-weight: 600;color: #2c3e50;}input, select, textarea {width: 100%;padding: 12px 15px;border: 1px solid #ddd;border-radius: 6px;font-size: 16px;transition: border 0.3s;}input:focus, select:focus, textarea:focus {outline: none;border-color: #3498db;box-shadow: 0 0 0 3px rgba(52, 152, 219, 0.2);}.result {background: #e3f2fd;padding: 15px;border-radius: 8px;margin-top: 15px;min-height: 50px;font-size: 18px;font-weight: 500;color: #0d47a1;}.note {background: #fff8e1;border-left: 4px solid #ffc107;padding: 15px;margin-top: 20px;border-radius: 0 8px 8px 0;}.note h3 {color: #ff9800;margin-bottom: 10px;}.code {background: #2c3e50;color: #ecf0f1;padding: 20px;border-radius: 8px;font-family: 'Courier New', monospace;margin: 15px 0;overflow-x: auto;}.footer {text-align: center;padding: 20px;background: #f8f9fa;color: #6c757d;font-size: 0.9rem;border-top: 1px solid #eee;}.filters-list {display: grid;grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));gap: 15px;margin-top: 20px;}.filter-item {background: #e3f2fd;padding: 15px;border-radius: 8px;border-left: 4px solid #2196f3;}.filter-item h4 {margin-bottom: 8px;color: #0d47a1;}@media (max-width: 768px) {.content {flex-direction: column;}.panel {min-width: 100%;margin: 10px 0;}}</style>
</head>
<body><div id="app"><div class="container"><header><h1>Vue.js 過濾器詳解</h1><p class="subtitle">過濾器用于文本格式化,在Vue 2中通過管道符(|)使用。Vue 3中已移除,建議使用計算屬性或方法替代。</p></header><div class="content"><div class="panel"><h2><i class="fas fa-filter"></i> 過濾器演示</h2><div class="input-group"><label for="textInput">輸入文本:</label><input type="text" id="textInput" v-model="inputText" placeholder="輸入文本進行格式化"></div><div class="input-group"><label for="numberInput">輸入數值:</label><input type="number" id="numberInput" v-model.number="inputNumber" placeholder="輸入數值進行格式化"></div><div class="filters-list"><div class="filter-item"><h4>大寫轉換</h4><div class="result">{{ inputText | uppercase }}</div></div><div class="filter-item"><h4>首字母大寫</h4><div class="result">{{ inputText | capitalize }}</div></div><div class="filter-item"><h4>貨幣格式化</h4><div class="result">{{ inputNumber | currency }}</div></div><div class="filter-item"><h4>百分比</h4><div class="result">{{ inputNumber | percent }}</div></div><div class="filter-item"><h4>反轉文本</h4><div class="result">{{ inputText | reverse }}</div></div><div class="filter-item"><h4>截斷文本</h4><div class="result">{{ inputText | truncate(20) }}</div></div><div class="filter-item"><h4>日期格式化</h4><div class="result">{{ currentDate | dateFormat('YYYY年MM月DD日') }}</div></div><div class="filter-item"><h4>鏈式調用</h4><div class="result">{{ inputText | uppercase | truncate(15) }}</div></div></div></div><div class="panel"><h2><i class="fas fa-code"></i> 過濾器定義</h2><div class="example"><h3>全局過濾器</h3><div class="code">
// 大寫轉換過濾器
Vue.filter('uppercase', function(value) {if (!value) return '';return value.toString().toUpperCase();
});// 貨幣格式化過濾器
Vue.filter('currency', function(value) {if (value === null || value === undefined) return '';return '¥' + value.toFixed(2);
});</div></div><div class="example"><h3>局部過濾器</h3><div class="code">
new Vue({filters: {// 首字母大寫capitalize: function(value) {if (!value) return '';value = value.toString();return value.charAt(0).toUpperCase() + value.slice(1);},// 帶參數的截斷過濾器truncate: function(value, length) {if (!value) return '';if (value.length <= length) return value;return value.substring(0, length) + '...';}}
});</div></div><div class="example"><h3>帶參數的過濾器</h3><div class="code">
// 日期格式化過濾器
Vue.filter('dateFormat', function(value, format) {if (!value) return '';const date = new Date(value);const year = date.getFullYear();const month = (date.getMonth() + 1).toString().padStart(2, '0');const day = date.getDate().toString().padStart(2, '0');return format.replace('YYYY', year).replace('MM', month).replace('DD', day);
});</div></div><div class="note"><h3><i class="fas fa-exclamation-triangle"></i> 重要注意事項</h3><ul><li>過濾器只用于文本格式化,不改變原始數據</li><li>過濾器函數應保持純凈,不產生副作用</li><li>過濾器不能訪問組件實例(this為undefined)</li><li>Vue 3中已移除過濾器功能,建議使用方法或計算屬性替代</li><li>復雜邏輯應使用計算屬性而非過濾器</li><li>過濾器可以鏈式調用,順序從左到右</li><li>第一個參數始終是管道符前的值</li></ul></div></div></div><div class="footer"><p>Vue.js 過濾器演示 | 在實際項目中考慮Vue版本兼容性</p></div></div></div><script>// 全局過濾器定義Vue.filter('uppercase', function(value) {if (!value) return '';return value.toString().toUpperCase();});Vue.filter('reverse', function(value) {if (!value) return '';return value.toString().split('').reverse().join('');});Vue.filter('currency', function(value) {if (value === null || value === undefined) return '';return '¥' + value.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,');});Vue.filter('percent', function(value) {if (value === null || value === undefined) return '';return (value * 100).toFixed(2) + '%';});Vue.filter('dateFormat', function(value, format) {if (!value) return '';const date = new Date(value);const year = date.getFullYear();const month = (date.getMonth() + 1).toString().padStart(2, '0');const day = date.getDate().toString().padStart(2, '0');return format.replace('YYYY', year).replace('MM', month).replace('DD', day);});new Vue({el: '#app',data: {inputText: 'Vue過濾器使用示例',inputNumber: 1234.567,currentDate: new Date()},filters: {// 局部過濾器:首字母大寫capitalize: function(value) {if (!value) return '';value = value.toString();return value.charAt(0).toUpperCase() + value.slice(1);},// 局部過濾器:截斷文本truncate: function(value, length) {if (!value) return '';if (value.length <= length) return value;return value.substring(0, length) + '...';}}});</script><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
</body>
</html>

關鍵知識點總結

  1. 過濾器定義

    • 全局過濾器使用Vue.filter()定義
    • 局部過濾器在組件選項的filters屬性中定義
  2. 過濾器使用

    • 通過管道符 | 使用
    • 可以鏈式調用:{{ value | filterA | filterB }}
    • 可以傳遞參數:{{ value | filter(arg1, arg2) }}
  3. 過濾器特點

    • 第一個參數是管道符前的值
    • 必須返回一個值
    • 不改變原始數據,只做格式化展示
    • 不能訪問組件實例(this為undefined)
  4. Vue 3的變更

    • Vue 3中已移除過濾器
    • 替代方案:使用計算屬性或方法
    • 示例:{{ formatCurrency(price) }}
  5. 最佳實踐

    • 用于簡單文本格式化
    • 復雜邏輯使用計算屬性
    • 保持過濾器函數純凈(無副作用)
    • 考慮向后兼容性(Vue 3遷移)

這個演示頁面展示了Vue 2中過濾器的各種用法,同時提供了Vue 3的遷移建議,幫助開發者更好地理解和應用過濾器功能。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/911924.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/911924.shtml
英文地址,請注明出處:http://en.pswp.cn/news/911924.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【iOS】iOS崩潰總結

【iOS】iOS崩潰總結 一、前言 之前寫了一篇博文《【Flutter】程序報錯導致的灰屏總結》&#xff0c;瀏覽量、收藏率和點贊量還挺高&#xff0c;還被收錄了&#xff0c;就想著總結一下iOS崩潰&#xff0c;這個也是在iOS面試中經常被問到的。 在 iOS 開發過程中&#xff0c;導致…

機器學習:特征向量與數據維數概念

特征向量與數據維數概念 一、特征向量與維數的定義 特征向量與特征類別 在機器學習和數據處理中&#xff0c;每個樣本通常由多個特征&#xff08;Feature&#xff09; 描述。例如&#xff0c;一張圖片的特征可能包括顏色、形狀、紋理等&#xff1b;一個客戶的特征可能包括年齡…

開發基于Jeston Orin Nx 開發版 16G的實現

一、基本配置 1.配置參數 密碼&#xff1a;yahboom Ubuntu 20.04版本、python3.8、CUDA11.4、cuDNN8.6、TensorRT8.5、Jetpack5.1.1、Opencv4.5.4版本 終端輸入命令&#xff1a;sudo jtop 其中Jetpack是英偉達提供的專門供它自己的嵌入式計算機平臺使用的人工智能包。 終…

【技術分享】XR技術體系淺析:VR、AR與MR的區別、聯系與應用實踐

XR技術體系淺析&#xff1a;VR、AR與MR的區別、聯系與應用實踐 作者&#xff1a;EQ 雪梨蛋花湯 本文是技術分享文檔&#xff0c;淺析VR&#xff08;虛擬現實&#xff09;、AR&#xff08;增強現實&#xff09;、MR&#xff08;混合現實&#xff09;的定義、特性、技術演進路線&…

R語言入門課| 05 一文掌握R語言常見數據類型

視頻教程 大家可以先做一做R語言基礎小測驗&#xff0c;看看自己是否需要跟我們5.5h入門R語言的課程。 先上教程視頻&#xff0c;B站同步播出&#xff1a; https://www.bilibili.com/video/BV1miNVeWEkw 完整視頻回放和答疑服務可見&#xff1a;5.5h入門R語言 本節課程視頻…

vRDMA 發布,助力云上 VPC 內高性能通信

資料來源&#xff1a;火山引擎-開發者社區 近日&#xff0c;火山引擎基于部分云服務器實例規格邀測發布 vRDMA 特性&#xff0c;提供云上 VPC 內大規模 RDMA 加速能力&#xff0c;可兼容傳統 HPC 應用、AI 應用以及傳統 TCP/IP 應用&#xff0c;降低大眾化場景的適配門檻&#…

Win10安裝dify

一、win10虛擬化設置&#xff0c;控制面板中開啟如下三個服務 二、檢查確認wls服務開啟 設置自動啟動并啟動 確認服務開啟 bcdedit 是否為auto&#xff0c;如果不是&#xff0c;設置為auto bcdedit /set hypervisorlaunchtype autocpu是否為虛擬化 更新wsl wsl --update二 …

【ai學習筆記】GitLab

CI/CD&#xff08;持續集成/持續交付&#xff09;是現代軟件開發中的關鍵實踐&#xff0c;通過自動化工具可以大幅提升開發效率和軟件質量。下面為你介紹CI/CD的核心概念、常用工具以及示例配置&#xff1a; 1. CI/CD 核心概念 持續集成&#xff08;CI&#xff09;&#xff1…

Solidity 從 0 到 1 |Web3 開發入門免費共學營

開啟你的 Web3 開發之旅&#xff0c;從 Sonic 開始&#xff01; 想進入區塊鏈開發的世界&#xff0c;卻不知道從哪里開始&#xff1f;選擇對的語言和平臺&#xff0c;才能事半功倍。 Solidity 是 Web3 中最主流、最通用的智能合約開發語言&#xff0c;被廣泛應用于以太坊及其…

【unitrix】 4.4 類型級整數比較系統(cmp.rs)

一、源碼 這段代碼實現了一個類型級別的整數比較系統&#xff0c;允許在編譯時進行整數比較操作。它定義了一套類型來表示比較結果&#xff0c;并為不同類型的整數實現了比較邏輯。 use core::cmp::Ordering; use core::default::Default; use crate::sealed::Sealed; use cr…

2025年滲透測試面試題總結-2025年HW(護網面試) 14(題目+回答)

安全領域各種資源&#xff0c;學習文檔&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具&#xff0c;歡迎關注。 目錄 1. SQL注入原理 &#x1f4a5; 2. XXE攻擊&#xff08;XML外部實體注入&#xff09; &#x1f9e9; 3. SQ…

Android開發根據滑動距離標題欄進行漸變

Android開發根據滑動距離標題欄進行漸變 假設滑動控件是NestedScrollView。 先監聽NestedScrollView的滑動距離&#xff1a; nslv_preview_me.setOnScrollChangeListener(object :NestedScrollView.OnScrollChangeListener{override fun onScrollChange(v: NestedScrollView…

高中成績可視化平臺開發筆記

高中成績可視化平臺&#xff08;1&#xff09; 一、項目概述 本系統是一個基于 PyQt5 和 Matplotlib 的高中成績數據可視化分析平臺&#xff0c;旨在幫助教師快速了解學生成績分布、班級對比、學科表現等關鍵指標。平臺支持文科與理科的數據切換&#xff0c;并提供多個維度的圖…

自動化按需導入組件庫的工具rust版本完成開源了

背景 當我為每個Vue項目使用ui組件庫的時候&#xff0c;都會使用按需導入的方式來使用ui組件庫。但是每次按需導入&#xff0c;不可避免的就需要做以下三步。我們以element plus ui組件庫為例。 1. 安裝依賴 第一步&#xff0c;當然是需要安裝依賴。命令如下: pnpm add unp…

Linux內核中TCP分段的核心機制:tcp_fragment函數解析

引言:TCP分段的必要性 在TCP/IP協議棧中,MSS(最大分段大小) 限制了單次傳輸的數據量。當應用層發送的數據超過當前路徑的MSS時,內核必須執行分段操作。tcp_fragment函數正是Linux內核中處理TCP分段的核心機制,它巧妙地在協議合規性、內存安全和性能效率之間取得平衡。 一…

【趙渝強老師】OceanBase OBServer節點的SQL層

OceanBase OBServer節點的SQL層將用戶的SQL請求轉化成對一個或多個Tablet的數據訪問。SQL層會按照以下順序經過一系列組件來處理一個SQL&#xff1a; Parser -->Resolver-->Transformer-->Optimizer-->CodeGenerator-->Executor。視頻講解如下 【趙渝強老師】O…

從“高配”到“普惠”,黑芝麻智能攜手Nullmax打造輔助駕駛主流量產方案

近日&#xff0c;黑芝麻智能攜手Nullmax打造的輔助駕駛主流量產方案正式發布。該方案面向8-15萬元級別主流車型&#xff0c;基于單顆黑芝麻智能武當C1236跨域計算芯片&#xff0c;集成Nullmax全棧自研的軟件技術架構&#xff0c;結合領先的視覺感知算法&#xff0c;打造高性能輔…

信息安全認證體系全解析:從資質證明到行業準入的實踐指南

Hello&#xff01;大家好&#xff0c;小編是一名專注IT領域的資深探索家&#xff0c;大家發現了嗎&#xff1f;現在刷招聘軟件&#xff0c;國企安全崗必標 "CISP 優先"&#xff0c;外企招聘悄悄寫著 "CISSP 加分"—— 這些帶字母的證書到底是啥&#xff1f…

優雅地創建實體類——Builder 鏈式調用

我們來看以下的代碼。改造前構造實體類用重載構造器或用 setter 對變量進行賦值&#xff0c;一旦變量變多則需要對每個變量進行 set 賦值&#xff0c;并且有可能會賦值錯對象。 private static void test() {//1.構造器賦值Task task1 new Task("2023000000009439"…

如何輕松將照片從 iPhone 傳輸到 Android?

從 iPhone 換到 Android 手機后&#xff0c;你肯定不想丟掉珍貴的照片回憶吧&#xff1f;好在&#xff0c;本文分享了 6 種有效的解決方案&#xff0c;教你如何輕松地將照片從 iPhone 傳輸到 Android。 第 1 部分&#xff1a;如何通過 iReaShare Phone Transfer 將照片從 iPhon…