Vue.js 列表過濾實現詳解(watch和computed實現)

Vue.js 列表過濾實現詳解

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>英雄列表過濾</title><!-- 引入Vue.js庫 --><script src="../js/vue.js"></script>
</head><body><!-- Vue應用掛載點 --><div id="app"><!-- 搜索輸入框,使用v-model雙向綁定keyword --><input type="text" placeholder="請輸入搜索內容" v-model="keyword"><!-- 英雄列表表格 --><table border="1px"><tr><th>序號</th><th>名字</th></tr><!-- 使用v-for循環渲染過濾后的英雄列表 --><tr v-for="hero in newArr" :key="hero.id"><td>{{hero.id}}</td><td>{{hero.name}}</td></tr></table></div><script>// 創建Vue實例new Vue({el: "#app",  // 指定掛載元素// 數據對象data: {keyword: '',  // 搜索關鍵詞heros: [     // 英雄原始數據{ id: 1, name: '亞索' },{ id: 2, name: '蓋倫' },{ id: 3, name: '艾希倫' },{ id: 4, name: '提莫' },{ id: 5, name: '李提青' }],newArr: []   // 存儲過濾后的英雄數組},// 監視器watch: {// 監視keyword的變化keyword: {immediate: true,  // 初始化時立即執行handlerhandler(val) {    // 處理函數,val是keyword的新值// 過濾英雄數組this.newArr = this.heros.filter((hero) => {// 檢查英雄名字是否包含搜索關鍵詞// 返回true表示保留該英雄,false表示過濾掉return hero.name.indexOf(val) >= 0;});}}}}) </script></body>
</html>

Vue.js 列表過濾實現文檔

1. 功能概述

該代碼實現了一個基于Vue.js的英雄列表過濾功能:

  • 用戶可以在輸入框中輸入搜索關鍵詞
  • 表格會實時顯示名字包含搜索關鍵詞的英雄
  • 支持中文搜索(不區分大小寫)
  • 初始加載時顯示所有英雄

2. 核心代碼解析

2.1 數據模型
data: {keyword: '',  // 存儲搜索關鍵詞heros: [     // 原始英雄數據{ id: 1, name: '亞索' },{ id: 2, name: '蓋倫' },// ...其他英雄],newArr: []   // 存儲過濾后的結果
}
2.2 監聽器實現
watch: {keyword: {immediate: true,  // 初始化時立即執行handlerhandler(val) {    // 當keyword變化時執行this.newArr = this.heros.filter((hero) => {// 使用indexOf檢查英雄名字是否包含關鍵詞return hero.name.indexOf(val) >= 0;});}}
}
2.3 模板渲染
<!-- 輸入框雙向綁定keyword -->
<input type="text" v-model="keyword"><!-- 渲染過濾后的列表 -->
<tr v-for="hero in newArr" :key="hero.id"><td>{{hero.id}}</td><td>{{hero.name}}</td>
</tr>

3. 功能特點

  1. 實時響應:使用v-model實現輸入框與數據的雙向綁定
  2. 即時過濾:通過watch監聽關鍵詞變化,實時更新列表
  3. 初始加載immediate: true確保頁面加載時顯示完整列表
  4. 性能優化:使用數組的filter方法高效過濾數據
  5. 鍵值綁定v-for配合:key="hero.id"提高渲染效率

4. 工作原理流程圖

用戶輸入關鍵詞
v-model更新keyword
watch檢測到keyword變化
執行handler函數
使用filter過濾heros數組
更新newArr數據
Vue重新渲染表格

5. 使用說明

  1. 在輸入框中輸入任意字符(如"提")
  2. 表格將實時顯示包含該字符的英雄(如"提莫"和"李提青")
  3. 清空輸入框將顯示所有英雄
  4. 支持部分匹配(如輸入"倫"會顯示"蓋倫"和"艾希倫")

6. 優化建議

  1. 添加空狀態提示

    <tr v-if="newArr.length === 0"><td colspan="2">未找到匹配的英雄</td>
    </tr>
    
  2. 不區分大小寫搜索

    return hero.name.toLowerCase().indexOf(val.toLowerCase()) >= 0;
    
  3. 防抖處理(避免頻繁觸發):

    handler: _.debounce(function(val) {// 過濾邏輯
    }, 300)
    
  4. 使用計算屬性替代watch

    computed: {filteredHeros() {return this.heros.filter(hero => hero.name.indexOf(this.keyword) >= 0);}
    }
    

7. 實際效果演示

搜索關鍵詞顯示結果
(空)所有英雄
“倫”蓋倫、艾希倫
“提”提莫、李提青
“亞”亞索
“不存在”空列表

8. 總結

該實現展示了Vue.js的核心功能:

  1. 數據綁定(v-model
  2. 響應式系統(watch
  3. 列表渲染(v-for
  4. 數組處理(filter

9.使用計算屬性來實現

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="../js/vue.js"></script>
</head><body><div id="app"><input type="text" placeholder="請輸入搜索內容" v-model="keyword"><table border="1px"><tr><th>序號</th><th>名字</th></tr><tr v-for="hero in newArr" :key="hero.id"><td>{{hero.id}}</td><td>{{hero.name}}</td></tr></table></div><script>new Vue({el: "#app",data: {keyword: '',heros: [ // 英雄數據{ id: 1, name: '亞索' },{ id: 2, name: '蓋倫' },{ id: 3, name: '艾希倫' },{ id: 4, name: '提莫' },{ id: 5, name: '李提青' }]},computed: {newArr() {return this.heros.filter((hero) => {return hero.name.indexOf(this.keyword) >= 0})}}}) </script></body></html>

通過簡潔的代碼實現了高效的列表過濾功能,是Vue.js響應式編程的典型應用場景。

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

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

相關文章

性能測試-jmeter實戰4

課程&#xff1a;B站大學 記錄軟件測試-性能測試學習歷程、掌握前端性能測試、后端性能測試、服務端性能測試的你才是一個專業的軟件測試工程師 性能測試-jmeter實戰4 jmeter環境搭建1. 安裝Java環境&#xff08;必需&#xff09; JMeter環境搭建完整指南1. 安裝Java&#xff0…

GPPT(Graph Pre-training and Prompt Tuning)項目復現

GPPT(Graph Pre-training and Prompt Tuning)項目復現 項目概述 GPPT是一種創新的圖神經網絡預訓練與提示調整框架,由MingChen-Sun等人提出。該項目通過將自然語言處理中的提示學習概念引入圖領域,解決了圖預訓練模型在下游任務中的適應性問題。 環境配置 # 創建Python…

anchor 智能合約 IDL 調用

簡介&#xff1a;通過 IDL 生成代碼 調用 anchor 智能合約。 全網首發 使用 anchor 可以快速開發 solana 上面的智能合約 &#xff0c; 在本案例中我們 先使用 anchor 創建一個只能合約&#xff08; 多個函數方法&#xff09;。 部署到 dev 鏈上。 通過 anchor 的 IDL 生成 代碼…

【Clickhouse系列】事務

目錄 1. 標準 ACID 支持場景 (MergeTree 引擎家族) 2. 非 ACID 場景 3. 實驗性事務功能 (非云環境) 總結 參考文檔 事務性 (ACID) 支持 | ClickHouse Docs ClickHouse ACID 支持核心要點 1. 標準 ACID 支持場景 (MergeTree 引擎家族) ? 單分區插入 (原子塊) ? ? 原子性…

在cursor中,配置jdk和maven環境,安裝拓展插件

目錄 1.手動配置jdk和maven 2.安裝java拓展插件 1.手動配置jdk和maven 第一步&#xff1a;按ctrl shift p, 搜索“Preferences: Open User Settings (JSON)” 并回車&#xff0c;打開 settings.json 文件 。然后添加或修改以下內容&#xff1a; "java.home": &qu…

(線性代數最小二乘問題)Normal Equation(正規方程)

Normal Equation&#xff08;正規方程&#xff09; 是線性代數中的一個重要概念&#xff0c;主要用于解決最小二乘問題&#xff08;Least Squares Problem&#xff09;。它通過直接求解一個線性方程組&#xff0c;找到線性回歸模型的最優參數&#xff08;如權重或系數&#xff…

在架構設計中平衡動態語言與靜態語言部署差異的策略分析

在軟件架構設計過程中&#xff0c;語言的選型不僅僅關乎開發效率&#xff0c;更直接影響系統的部署速度、運行性能與維護成本。動態語言&#xff08;如 Python、Node.js&#xff09;部署快、開發靈活&#xff1b;靜態語言&#xff08;如 Go、Java、Rust&#xff09;性能強、類型…

我的VSCode中那些插件

前言 最近在研究VUE.JS&#xff0c;而VUE官方推薦使用VSCode作為開發工具&#xff0c;因此最近才開始大量使用這個工具。在使用過程中&#xff0c;總會遇到一些視頻博主推薦某某插件&#xff0c;于是我都將其安裝在我的VSCode上。這里記錄一下&#xff0c;僅供參考。 插件列表…

C# 時間格式日期格式使用合集

一、常用整理 C#時間使用整理,DateTime 使用整理_c#時間格式-CSDN博客 C# 本地時間格式&#xff0c;UTC時間格式&#xff0c;GMT時間格式處理 二、 C#如何獲取今天零點的時間 C# 獲取周一、周日 三、 C#計算兩個時間年份月份差 C#時間點字符串轉換為日期&#xff0c;當…

Ribbon負載均衡的具體實現原理

Ribbon 是 Netflix 開源的一款客戶端負載均衡工具&#xff0c;廣泛應用于微服務架構中&#xff0c;用于在客戶端選擇目標服務實例。 以下是 Ribbon 負載均衡的具體實現原理&#xff1a; 1. 什么是 Ribbon Ribbon 是一個客戶端負載均衡器&#xff0c;負責從服務注冊中心&#…

iOS APP上架App Store實踐:通過自動化流程和輔助工具高效提

在現代開發流程中&#xff0c;持續集成&#xff08;CI&#xff09;已經成為必不可少的環節。對于iOS應用的開發與發布&#xff0c;持續集成不僅限于構建過程&#xff0c;還應該涵蓋從代碼提交到版本發布的整個生命周期。然而&#xff0c;由于iOS平臺對開發環境的限制&#xff0…

3443. K 次修改后的最大曼哈頓距離

3443. K 次修改后的最大曼哈頓距離 題目鏈接&#xff1a;3443. K 次修改后的最大曼哈頓距離 代碼如下&#xff1a; class Solution { public:int maxDistance(string s, int k) {int res 0;// 定義一個大小為 X&#xff08;88&#xff09;的數組&#xff0c;并初始化為 0int…

【Ubuntu】Windows11安裝虛擬機超詳細圖文教程(VMware17.6.1 + ubuntu-24.04.2)

目錄 前言 一、準備工作 1、工具安裝包 2、獲取方式 3、本人的電腦安裝環境介紹 二、虛擬機磁盤分區&#xff08;可選&#xff09; 1、分區助手安裝 2、為虛擬機準備一個單獨的磁盤分區 三、VMware安裝 四、ubuntu鏡像安裝 1、Ubuntu鏡像iso文件加載引導 2、Ubuntu…

計算機視覺(Computer Vision, CV)

目錄 一、核心任務 二、常見應用場景 三、主流技術框架與工具 四、熱門算法簡述 五、發展趨勢 六、計算機視覺學習路線圖&#xff08;從入門到實戰&#xff09; 1.階段總覽 2.學習路徑詳解 階段一&#xff1a;CV入門基礎 學習目標&#xff1a; 推薦內容&#xff1a;…

使用Dagster資產工廠模式高效管理重復ETL任務

本文介紹了如何利用Dagster的資產工廠模式來高效管理和自動化重復的ETL&#xff08;提取、轉換、加載&#xff09;任務。通過Python函數和YAML配置文件的結合&#xff0c;我們可以輕松地創建和管理大量相似的資產&#xff0c;同時提高代碼的可維護性和可配置性。文章還探討了如…

淺談開源在線客服系統與 APP 集成的技術方案與優劣勢

在為移動端 App 接入在線客服系統的過程中&#xff0c;我經歷了長時間的技術選型探索。最初&#xff0c;我也曾被一些“技術理想主義”選項所吸引&#xff0c;比如讓用戶自己研發界面我提供 API 以獲得最高自由度&#xff0c;或集成 SDK 以追求原生體驗。然而&#xff0c;隨著項…

prometheus+grafana+MySQL監控

prometheusgrafanaMySQL監控 環境說明 操作前提&#xff1a; 先去搭建Docker部署prometheusgrafana...這篇文章的系統 Docker部署prometheusgrafana...的參考文章&#xff1a; Docker部署prometheusgrafana…-CSDN博客 在的節點服務器上搭建MySQL數據庫&#xff08;可以采用直…

多模態+類人認知:Embodied AI邁向AGI的三大瓶頸與突破路徑

作者&#xff1a;Yequan Wang&#xff1b;Aixin Sun 摘要 AGI常被視為本質上具有具身特性。隨著機器人技術和基礎人工智能模型的最新進展&#xff0c;我們正站在一個新時代的門檻上——這一時代以日益通用化的具身人工智能系統為標志。本文通過提出一個涵蓋五個層級&#xff…

wpf DataTemplate 寬度和控件寬度一樣

wpf DataTemplate 寬度和控件寬度一樣 在WPF中,如果你想要一個DataTemplate的寬度與它內部控件的寬度一致,你可以使用幾種不同的方法來實現這一點。下面是一些常見的方法: 方法1:使用DataTemplate的Width屬性 你可以在DataTemplate中直接設置Width屬性,使其與內部控件的…

C#上位機實現報警語音播報

我們在開發C#上位機時&#xff0c;有時候會需要將報警信息通過語音進行播報&#xff0c;今天跟大家分享一下具體的實現過程。 一、組件安裝 首先我們創建好一個Windows窗體項目&#xff0c;然后添加System.Speech庫引用。 點擊引用&#xff0c;右擊添加引用&#xff0c;在程…