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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…