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

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