Vue基礎知識-使用監視屬性watch和計算屬性computed實現列表過濾+排序

一、完整源碼

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="../js/vue.js"></script>
</head>
<body><div id="root">監視屬性實現按名模糊搜索:<input type="text" v-model="keyword" /></br></br><table border="1px solid black"><tr><td>id</td><td>姓名</td><td>年齡</td></tr><tr v-for = 'person in filterPersons' :key="person.id"><td>{{person.id}}</td><td>{{person.name}}</td><td>{{person.age}}</td></tr></table><hr>計算屬性實現按名模糊搜索:<input type="text" v-model="keyword2" /><input type="button"  @click="sortType = 1" value="年齡升序"/><input type="button" @click="sortType = 2" value="年齡降序"/></br></br><table border="1px solid black"><tr><td>id</td><td>姓名</td><td>年齡</td></tr><tr v-for = 'person in filterPersons2' :key="person.id"><td>{{person.id}}</td><td>{{person.name}}</td><td>{{person.age}}</td></tr></table></div>
</body><script>const vm = new Vue({el:'#root',data() {return {persons:[{id:1,name:'張三',age:19},{id:2,name:'李四',age:15},{id:3,name:'王五',age:16},{id:4,name:'張三2',age:17}],filterPersons:[],keyword:'',keyword2:'',sortType:0}},watch:{keyword:{immediate:true, //立即執行監視handler(val){//filter將返回一個新的數組;'abc'.indexOf('')的返回值為0this.filterPersons = this.persons.filter((person)=>{return person.name.indexOf(val) !== -1   //包含val則保留該person})}},},//filterPersons2 何時調get? 1 上來就調用 2 依賴的keyword2,sortType變化就調用computed:{filterPersons2(){const arr =  this.persons.filter((person)=>{return person.name.indexOf(this.keyword2) !== -1  })if(this.sortType){arr.sort((person1,person2)=>{return this.sortType == 2 ?person2.age - person1.age:person1.age - person2.age})}return arr}}})</script>
</html>

二、核心知識點解析

1. 功能模塊拆解

頁面分為兩個獨立模塊,對比展示watchcomputed的差異:

模塊核心技術功能依賴數據
上方表格watch僅姓名模糊搜索keyword
下方表格computed姓名模糊搜索 + 年齡升 / 降序排序keyword2、sortType

2. 監視屬性(watch)詳解

2.1 為什么需要immediate: true

Vue 的watch默認僅在監聽的數據(如 keyword)發生變化時才觸發 handler,初始化時(頁面加載時)不會執行。
若不加immediate: true,頁面打開時filterPersons為空,表格會顯示空白;加上后,初始化時會主動執行一次 handler,加載所有人員數據。

2.2?filterindexOf的核心邏輯
  • Array.prototype.filter():遍歷數組,返回一個新數組,包含所有滿足 “回調函數返回 true” 的元素(不修改原數組)。
  • String.prototype.indexOf(val):返回val在字符串中首次出現的索引,若不存在則返回-1
    關鍵細節:'abc'.indexOf('')返回0,因此當搜索框為空(keyword='')時,person.name.indexOf('') !== -1恒成立,表格會顯示所有數據。

3. 計算屬性(computed)詳解

3.1 computed 的核心特性:依賴緩存

computed的屬性(如filterPersons2)會緩存計算結果,只有當它依賴的數據(keyword2sortType)發生變化時,才會重新執行getter(即函數體);若依賴數據不變,多次訪問filterPersons2會直接返回緩存值,避免重復計算,效率高于methods

3.2 排序邏輯解析
filteredArr.sort((p1, p2) => {return this.sortType === 2 ? p2.age - p1.age : p1.age - p2.age
})
  • sort方法的回調函數返回值規則:
    • 返回正數:p1 排在 p2 后面(升序);
    • 返回負數:p1 排在 p2 前面(降序);
    • 返回 0:順序不變。
  • 此處通過sortType控制排序方向:
    • sortType=1:升序 →?p1.age - p2.age(如 15-16=-1,15 排在 16 前);
    • sortType=2:降序 →?p2.age - p1.age(如 16-15=1,16 排在 15 前)。

三、運行效果與注意事項

1. 運行效果

  1. 頁面加載時,兩個表格均顯示所有 4 條人員數據;
  2. 上方搜索框輸入 “張”,僅顯示 “張三” 和 “張三 2”;
  3. 下方搜索框輸入 “張”,再點擊 “年齡降序”,表格按 “19(張三)→17(張三 2)” 排序;
  4. 點擊 “年齡升序”,下方表格按 “17(張三 2)→19(張三)” 排序。

2. 注意事項

  • Vue 版本:本文使用Vue2(代碼中new Vue({el: '#root'})為 Vue2 語法),若使用 Vue3,需調整為createApp語法;
  • 數組方法影響:sort方法會修改原數組,本文中filteredArrfilter返回的新數組,修改它不會影響原始persons數據,避免數據污染;
  • 兼容性:indexOf在所有現代瀏覽器中支持,若需兼容更老瀏覽器,可替換為includes(如person.name.includes(val))。

四、總結

  • watch更適合 “監聽單個數據變化并執行邏輯” 的場景,如數據變化后發起接口請求;
  • computed更適合 “依賴多個數據計算派生值” 的場景,如表格的過濾 + 排序,且緩存機制能提升性能。

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

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

相關文章

自動化運維-ansible中的管理機密

自動化運維-ansible中的管理機密 一、Ansible Vault 在自動化配置管理中&#xff0c;直接以純文本形式存儲密碼、API密鑰、證書等敏感信息是極大的安全漏洞。Ansible Vault 正是為了解決這一問題而設計的核心功能 Ansible Vault 是 Ansible 的一個核心功能&#xff0c;它允許用…

UFUNCTION C++ 的再次理解

一.UFUNCTION 格式和屬性也比較像&#xff0c;兩部分 函數說明符&#xff0c;和元數據說明符UFUNCTION不僅能 控制對藍圖公開&#xff0c;還能與 綁定委托&#xff0c;用戶輸入,網絡回調功能相關聯&#xff0c;而且還能創建自己控制帶命令二.函數說明符控制 &#xff0c;函數在…

《論文閱讀》從心到詞:通過綜合比喻語言和語義上下文信號產生同理心反應 2025 ACL findings

《論文閱讀》從心到詞:通過綜合比喻語言和語義上下文信號產生同理心反應 2025 ACL findings 前言 創新點 形象語言 (Figurative Language) 語義上下文信號(Semantic Context Signals) 模型架構 情緒原因標注 形象語言元數據獲取 共情回復生成 實驗結果 總結 趨勢 前言 親…

MySQL內置的各種單行函數

精選專欄鏈接 &#x1f517; MySQL技術筆記專欄Redis技術筆記專欄大模型搭建專欄Python學習筆記專欄深度學習算法專欄 歡迎訂閱&#xff0c;點贊&#xff0b;關注&#xff0c;每日精進1%&#xff0c;與百萬開發者共攀技術珠峰 更多內容持續更新中&#xff01;希望能給大家帶來…

Python OpenCV圖像處理與深度學習:Python OpenCV視頻處理入門

視頻處理基礎&#xff1a;掌握OpenCV視頻操作 學習目標 通過本課程&#xff0c;學員們將學習如何使用Python和OpenCV庫來處理視頻文件&#xff0c;包括讀取視頻、捕獲攝像頭視頻流、處理視頻幀以及保存處理后的視頻&#xff0c;同時&#xff0c;能夠獨立完成基本的視頻處理任務…

AI 賦能 Java 開發效率:全流程痛點解決與實踐案例(四)

文檔與注釋自動化&#xff1a;從 “手動撰寫” 到 “實時同步”&#xff0c;降低維護成本 &#x1f4c4; Java 開發強調 “文檔先行”&#xff0c;Javadoc 注釋、架構文檔、接口文檔是項目維護的重要資產。但手動撰寫文檔存在兩大痛點&#xff1a;一是耗時&#xff08;開發者平…

【機器學習學習筆記】pandas基礎

零基礎入門 Pandas&#xff1a;數據處理的 "萬能工具"如果你是剛接觸數據分析的小白&#xff0c;一定聽過 "Pandas" 這個名字。簡單說&#xff0c;Pandas 是 Python 中專門用來處理數據的工具庫&#xff0c;就像 Excel 的 "高級版"—— 能更快、…

(Mysql)MVCC、Redo Log 與 Undo Log

1. MVCC&#xff08;多版本并發控制&#xff09;概念 MVCC&#xff08;Multi-Version Concurrency Control&#xff09;是一種數據庫并發控制機制&#xff0c;用于解決 讀寫沖突&#xff0c;提高數據庫并發性能。MySQL InnoDB 存儲引擎使用 MVCC 來實現 非阻塞讀&#xff08;即…

OpenCV-Python Tutorial : A Candy from Official Main Page(五)

4.5FAST Algorithm for Corner Detection 4.5.1FAST算法 我們已了解多種特征檢測器&#xff0c;其中許多效果出色。但從實時應用的角度來看&#xff0c;它們的速度仍不夠快。一個典型例子是計算資源有限的SLAM&#xff08;同步定位與建圖&#xff09;移動機器人。 為解決此問…

LINUX 91 SHELL:刪除空文件夾 計數

問題 [rootweb ~]# find -type f -exec echo "file:{}" $path; find: 遺漏“-exec”的參數 您在 /var/spool/mail/root 中有郵件[rootweb ~]# $path/root -bash: /root: 沒有那個文件或目錄 您在 /var/spool/mail/root 中有新郵件 [rootweb ~]# path/root [rootweb ~…

視頻軟解碼技術詳解:原理、應用與未來發展

視頻軟解碼的基本原理 概念解析&#xff1a;CPU主導的通用解碼方式 視頻軟解碼是一種完全依賴通用CPU執行解碼算法的視頻還原技術&#xff0c;其核心特征在于不依賴任何專用硬件模塊&#xff0c;而是通過軟件程序調用CPU的通用計算能力完成壓縮視頻數據的解碼過程[1][2]。與硬…

線性回歸中梯度下降與正規方程以及擬合問題與正則化

線性回歸實戰指南&#xff1a;從理論到實踐 目錄 線性回歸理論基礎機器學習項目開發流程波士頓房價預測實戰梯度下降與正規方程模型評估指標擬合問題與正則化總結與展望 1. 線性回歸理論基礎 1.1 什么是線性回歸&#xff1f; 線性回歸是一種監督學習算法&#xff0c;用于預…

為什么46.1k程序員都在用這個AI繪畫神器?我體驗一周后終于明白了

大家好&#xff0c;我是顧北&#xff0c;一名AI應用探索者&#xff0c;也是GitHub開源項目收集者。說起AI繪畫這事兒&#xff0c;我之前真的是又愛又恨。上個月想給朋友搞張生日賀圖&#xff0c;結果在Stable Diffusion WebUI里折騰了大半天。采樣步數&#xff1f;CFG比例&…

Java基礎第8天總結(map遍歷、Stream流)

選中一部分代碼&#xff0c;然后CTRLALTT&#xff0c;可以在外面套上while循環,try..catch之類的小案例&#xff1a;電影信息管理模塊&#xff1a;用戶可以上架、查詢、下架、下架某個主演參演的電影package Demo;import lombok.AllArgsConstructor; import lombok.Data; impor…

總線矩陣的原理

總線矩陣&#xff08;Bus Matrix&#xff09;是多主設備共享多從設備的智能連接與仲裁核心&#xff0c;本質是一個“靈活的交叉開關陣列”&#xff0c;用于解決多個主設備&#xff08;如CPU、DMA、GPU&#xff09;同時訪問多個從設備&#xff08;如內存、外設、存儲芯片&#x…

硬件開發_基于Zigee組網的果園養殖監控系統

一.系統概述 果園環境監控系統功能如下&#xff1a; 核心控制器&#xff1a;以STM32為核心控制器&#xff0c;承擔整體的數據采集、處理及控制任務。環境參數監測&#xff1a;集成溫度傳感器、CO?傳感器、光照傳感器和土壤濕度傳感器&#xff0c;可實時采集果園內的溫度、二氧…

K8s調度核心:從Pod分配到節點優化

在 Kubernetes&#xff08;K8s&#xff09;中&#xff0c;Pod 調度是指 K8s 系統根據特定規則和策略&#xff0c;將 Pod 合理分配到集群中的某個節點&#xff08;Node&#xff09;上運行的過程。其核心目標是確保 Pod 在合適的節點上高效、穩定地運行&#xff0c;充分利用集群資…

Tomcat 企業級運維實戰系列(四):Tomcat 企業級監控

Tomcat 企業級運維實戰系列&#xff08;四&#xff09;&#xff1a;Tomcat 企業級監控一&#xff1a;監控工具1&#xff09;概述2&#xff09;流程3&#xff09;部署二&#xff1a;監控命令1&#xff09;jps2&#xff09;jstack3&#xff09;jmap4&#xff09;MAT 工具分析三&a…

技術干貨丨HyperMesh 新界面功能與技術升級解析

全文內容選自 Altair 區域技術交流會華東站Altair 高級技術經理 張晨《HyperWorks 2025&#xff1a;下一代建模可視化和二次開發平臺》演講1、引言今天我為大家介紹 HyperMesh——這個大家既熟悉又陌生的工具。說熟悉&#xff0c;是因為它一直是工程仿真領域的主流建模軟件&…

《IC驗證必看|隨機穩定性 / 再現性》

同一用例 A 機 pass、B 機 fail&#xff1f;——SystemVerilog 隨機穩定性 / 可復現性全攻略&#xff08;含代碼與排查清單&#xff09;你該到什么水平&#xff1f;&#xff08;對標 20k / 25k / 30k&#xff09; 20k&#xff08;入門會用&#xff09; 會 randomize()、$urando…