当前位置: 首页 > news >正文

Vue中的事件委托(事件代理)使用方法介绍

事件委托(事件代理)

将原本需要绑定在子元素上的事件监听器委托在父元素上,让父元素充当事件监听的职务。

事件委托是一种利用事件冒泡的特性,在父节点上响应事件,而不是在子节点上响应事件的技术。它能够改善性能,因为只需要在父元素上设置一次事件监听器,就可以管理同一类型的所有子元素的事件。

事件委托利用了事件冒泡的原理,即事件从最深的节点开始,逐步向上传播。在事件冒泡过程中,父元素会捕获到子元素的事件,并进行分析。通过查看event对象的属性,可以确定是哪个子元素的事件,从而执行相应的处理逻辑。

使用事件委托能够避免对每个子元素单独设置事件监听器,降低了与DOM交互的次数,提高了页面的整体运行性能。同时,事件委托也具有更高的灵活性和可维护性,不需要操作大量的DOM元素。

在Vue中,可以利用v-on指令或@符号来绑定事件监听器,并在父元素上设置事件委托。例如,可以在父元素上设置一个click事件监听器,然后在子元素上绑定一个click事件,通过事件委托实现父元素对子元素事件的响应。

优点:

节省内存(dom与js的关联),减少事件的注册
增加子元素也无需再注册事件

缺点:

获取绑定的节点数据会相对麻烦一点

在日常开发中,很经常我们会遇到个问题,就是在长列表数据较多的时候,而又需要对子元素注册一些事件(如onClick),就会造成比较大的内存开支,很耗费性能,也可能会造成页面卡顿等等;
所以可以通过在父元素上添加@click监听,而不是在子元素上注册事件;
如果数据量比较少,就可忽略不计;

html代码:

<div id="app"><div id="event-agent" @click="eventAgent"><p v-for="(item, index) in list" :key="index" :data-name="item.name" :data-index="index">{{item.name}}</p></div>
</div>

获取节点参数 (data-index、data-name),则在 $event.target.dataset { index: 'xxx', name: 'xxx' } 中取值

 js代码

data() {return { list: [{ id: 1, name: 'kmj1'},{ id: 2, name: 'kmj2'},{ id: 3, name: 'kmj3'},{ id: 4, name: 'kmj4'}]   }
},
methods: { // 事件委托eventAgent(e) {const target = e.target; console.log(target )// 注意 e.target.nodeName 的元素名是大写的if (target  && target.nodeName === "P") {const dataset = target .dataset;console.log('$event.target.dataset : ' dataset ); // $event.target.dataset :  { name: 'xxx', index: 'xxx' }}}
}

原生的写法其实也差不多:

document.getElementById( "event-agent").onclick = function(event){ // 兼容Ie的写法event = event || window.event;var  target = event.target || event.srcElement;  // 注意 e.target.nodeName 的元素名是大写的if (target  && target.nodeName === "P") {const dataset = target .dataset;console.log('$event.target.dataset : ' dataset ); // $event.target.dataset :  { name: 'xxx', index: 'xxx' }}
}; // 也可以用这种方式,其实都差不多的:
// 冒泡阶段处理程序  
document.getElementById( "event-agent").addEventListener( "click", (e) => {},   false);
// 捕获阶段处理程序
document.getElementById( "event-agent").addEventListener( "click", (e) => {},   true);

相关文章:

Vue中的事件委托(事件代理)使用方法介绍

事件委托&#xff08;事件代理&#xff09; 将原本需要绑定在子元素上的事件监听器委托在父元素上&#xff0c;让父元素充当事件监听的职务。 事件委托是一种利用事件冒泡的特性&#xff0c;在父节点上响应事件&#xff0c;而不是在子节点上响应事件的技术。它能够改善性能&a…...

「HDLBits题解」Wire decl

本专栏的目的是分享可以通过HDLBits仿真的Verilog代码 以提供参考 各位可同时参考我的代码和官方题解代码 或许会有所收益 题目链接&#xff1a;Wire decl - HDLBits default_nettype none module top_module(input a,input b,input c,input d,output out,output out_n ); w…...

[MAUI]在.NET MAUI中调用拨号界面

在.NET MAUI中调用拨号界面 前置要求: Visual Studio 2022 安装包“.NET Multi-platform App UI 开发” 参考文档: 电话拨号程序 新建一个MAUI项目 在解决方案资源管理器窗口中找到Platforms/Android/AndroidManifest.xml在AndroidManifest.xml中添加下文中…块如下:<?xml…...

Kali/Debian Linux 安装Docker Engine

0x01 卸载旧版本 在安装Docker Engine之前&#xff0c;需要卸载已经安装的可能有冲突的软件包。一些维护者在他们的仓库提供的Docker包可能是非Docker官方发行版&#xff0c;须先卸载这些软件包&#xff0c;然后才能安装Docker官方正式发行的Docker Engine版本。 要卸载的软件…...

Spring 应用合并之路(二):峰回路转,柳暗花明 | 京东云技术团队

书接上文&#xff0c;前面在 [Spring 应用合并之路&#xff08;一&#xff09;&#xff1a;摸石头过河]介绍了几种不成功的经验&#xff0c;下面继续折腾… 四、仓库合并&#xff0c;独立容器 在经历了上面的尝试&#xff0c;在同事为啥不搞两个独立的容器提醒下&#xff0c;…...

SQL Error 1366, SQLState HY000

SQL错误 1366 和 SQLState HY000 通常指的是 MySQL 与字符编码或数据截断有关的问题。当尝试将数据插入具有与正在插入的数据不兼容的字符集或排序规则的列时&#xff0c;或者正在插入的数据对于列来说过长时&#xff0c;就会出现此错误。 解决方式&#xff1a; 检查列长度&am…...

Codeforces Round 893 (Div. 2)(VP-7,寒假加训)

VP时间 A. 关键在于按c的按钮 c&1 Alice可以多按一次c按钮 也就是a多一个&#xff08;a&#xff09; 之后比较a,b大小即可 !(c&1) Alice Bob操作c按钮次数一样 1.ac B.贪心 一开始会吃饼干 如果有卖饼的就吃 如果隔离一段时间到d没吃就吃&#xff08;当时…...

MySQL第四战:视图以及常见面试题(上)

目录 目录&#xff1a; 一.视图 1.介绍什么是视图 2.视图的语法 语法讲解 实例操作 二.MySQL面试题 1.SQL脚本 2.面试题实战 三.思维导图 目录&#xff1a; 随着数字化时代的飞速发展&#xff0c;数据库技术&#xff0c;特别是MySQL&#xff0c;已经成为IT领域中不可…...

C语言程序设计——程序流程控制方法(一)

C语言关系运算符 ---等于ab!不等于a!b<、>小于和大于a>b 、a<b<、>小于等于、大于等于a>b 、a<b!非!(0)、!(NULL) 在C99之后&#xff0c;C语言开始支持布尔类型&#xff0c;头文件是stdbool.h。在文中我所演示的所有代码均是C99版。 在C语言上上述关…...

torch.backends.cudnn.benchmark

torch.backends.cudnn.benchmark 的设置对于使用 PyTorch 进行深度学习训练的性能优化至关重要。具体而言&#xff0c;它与 NVIDIA 的 CuDNN&#xff08;CUDA Deep Neural Network library&#xff09;库有关&#xff0c;该库是在 GPU 上加速深度神经网络计算的核心组件。 启用…...

SQL Server从0到1——写shell

xp_cmdshell 查看能否使用xpcmd_shell&#xff1b; select count(*) from master.dbo.sysobjects where xtype x and name xp_cmdshell 直接使用xpcmd_shell执行命令&#xff1a; EXEC master.dbo.xp_cmdshell whoami 发现居然无法使用 查看是否存在xp_cmdshell: EXEC…...

计算圆弧的起始角度、终止角度和矩形信息并使用drawArc绘制圆弧

Qt中常用绘制圆弧的库函数&#xff1a; //函数原型 void QPainter::drawArc(const QRectF &rectangle, int startAngle, int spanAngle)Qt规定1约占16个像素&#xff0c;比如一个完整的圆等于360度&#xff0c;对应的像素角度就是 5760度&#xff08;16 * 360&#xff09;…...

C++ Trie树模版 及模版题 || Trie字符串统计

Trie树&#xff1a;用来高效的存储和查找字符串集合的数据结构。 维护一个字符串集合&#xff0c;支持两种操作&#xff1a; I x 向集合中插入一个字符串 x &#xff1b; Q x 询问一个字符串在集合中出现了多少次。 共有 N 个操作&#xff0c;所有输入的字符串总长度不超过 1…...

Linux基础命令@echo、tail、重定向符

目录 echo概念语法作用演示一演示二 反引号作用 tail概念语法作用不带选项&#xff0c;演示一带选项 -num&#xff0c;演示二带选项 -f &#xff0c; 持续跟踪 重定向符概念作用覆盖重定向&#xff0c;>演示一演示二 追加重定向&#xff0c;>>演示一演示二 总结 echo …...

uniapp:签字版、绘画板 插件l-signature

官方网站&#xff1a;LimeUi - 多端uniapp组件库 使用步骤&#xff1a; 1、首先从插件市场将代码下载到项目 海报画板 - DCloud 插件市场 2、下载后&#xff0c;在项目中的uni_modules目录&#xff08;uni_modules优点&#xff1a;不需要import引入&#xff0c;还可以快捷更新…...

Python Pillow(PIL)库的用法介绍

Python的Pillow库&#xff08;PIL&#xff09;是一个强大的图像处理库&#xff0c;可以用来进行图像的读取、编辑、处理和保存等操作。下面是一些Pillow库的基本用法介绍&#xff1a; 安装Pillow库&#xff1a; 在命令行中输入以下命令即可安装Pillow库&#xff1a; 复制代码 p…...

uniapp 【专题详解 -- 时间】云数据库时间类型设计,时间生成、时间格式化渲染(uni-dateformat 组件的使用)

云数据表的时间类型设计 推荐使用时间戳 timestamp "createTime": {"bsonType": "timestamp","label": "创建时间&#xff1a;" }时间生成 获取当前时间 Date.now() .add({createTime: Date.now() })时间格式化渲染 下载安…...

k8s之flink的几种创建方式

在此之前需要部署一下私人docker仓库&#xff0c;教程搭建 Docker 镜像仓库 注意&#xff1a;每台节点的daemon.json都需要配置"insecure-registries": ["http://主机IP:8080"] 并重启 一、session 模式 Session 模式是指在 Kubernetes 上启动一个共享的…...

应用OpenCV绘制箭头

绘制箭头函数 方法&#xff1a;函数cv2.arrowedLine( ) 语法格式&#xff1a;cv2.arrowedLine(img, pt1, pt2, color[, thickness[, line_type[, shift[, tipLength]]]]) 参数说明&#xff1a; img&#xff1a;要画的直线所在的图像&#xff0c;也称为画布。。 pt1&#x…...

信息学奥赛一本通1032:大象喝水查

1032&#xff1a;大象喝水查 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 104347 通过数: 64726 【题目描述】 一只大象口渴了&#xff0c;要喝20升水才能解渴&#xff0c;但现在只有一个深h厘米&#xff0c;底面半径为r厘米的小圆桶(h和r都是整数)。问大象至少…...

开源ChatGPT API代理部署指南:低成本调用AI模型实战

1. 项目概述&#xff1a;一个开源ChatGPT API代理的诞生最近在折腾AI应用开发的朋友&#xff0c;估计都绕不开一个核心问题&#xff1a;如何稳定、低成本地调用类似ChatGPT这样的强大语言模型。官方API虽然稳定&#xff0c;但价格和网络限制让很多个人开发者和初创团队望而却步…...

Divinity Mod Manager:如何用技术架构解决《神界:原罪2》模组管理的复杂性?

Divinity Mod Manager&#xff1a;如何用技术架构解决《神界&#xff1a;原罪2》模组管理的复杂性&#xff1f; 【免费下载链接】DivinityModManager A mod manager for Divinity: Original Sin - Definitive Edition. 项目地址: https://gitcode.com/gh_mirrors/di/Divinity…...

终极NDS游戏资源提取器:Tinke如何让你免费解锁任天堂DS游戏文件

终极NDS游戏资源提取器&#xff1a;Tinke如何让你免费解锁任天堂DS游戏文件 【免费下载链接】tinke Viewer and editor for files of NDS games 项目地址: https://gitcode.com/gh_mirrors/ti/tinke 你是否曾经好奇过任天堂DS游戏中的精美图像、动听音乐和独特字体是如何…...

Verilog行为级建模:从initial/always到阻塞非阻塞赋值的核心语法解析

1. 项目概述&#xff1a;从“连线”到“行为”的思维跃迁刚接触数字电路设计的朋友&#xff0c;可能都是从画原理图、连逻辑门开始的。但当你面对一个需要处理复杂时序、包含状态机或者有算法逻辑的模块时&#xff0c;光靠门级网表来描述&#xff0c;那工程量简直让人头皮发麻。…...

python 中的进制

进制是数值的表示方式&#xff0c;Python 原生支持二进制、八进制、十进制、十六进制&#xff0c;并提供了丰富的进制转换功能。一、进制表示方式1. 四种进制的字面量# 十进制&#xff08;默认&#xff09; dec 42 print(dec) # 42# 二进制&#xff1a;0b 或 0B 前缀 b…...

百度网盘Mac版终极加速方案:免费解锁SVIP级下载体验

百度网盘Mac版终极加速方案&#xff1a;免费解锁SVIP级下载体验 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘Mac版的蜗牛下载速度而烦…...

餐饮排烟5大误区,避开少走弯路

做餐饮这些年&#xff0c;见过太多后厨排烟出问题的门店。每家厨房格局、业态不同&#xff0c;排烟遇到的麻烦也五花八门。结合实操经验&#xff0c;整理出餐饮排烟最容易踩的 5 个坑&#xff0c;附上实用解决办法&#xff0c;看完能避开不少问题。一、居民区门店&#xff1a;大…...

如何用 curl 命令快速测试 Taotoken 的 API 是否连通

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 如何用 curl 命令快速测试 Taotoken 的 API 是否连通 在接入大模型服务时&#xff0c;直接使用 curl 命令测试 API 是最基础、最直…...

从零开始:用PX4的uORB消息机制,手把手教你实现模块间通信(附代码示例)

从零构建PX4模块通信&#xff1a;uORB消息机制实战指南 在PX4飞控生态中&#xff0c;模块间通信如同无人机的神经系统&#xff0c;而uORB&#xff08;微对象请求代理&#xff09;正是这个系统的核心传输介质。当开发者尝试为飞控添加激光雷达或自定义IMU时&#xff0c;往往会遇…...

为Adafruit CLUE开发板设计超薄可拆卸3D打印外壳:从建模到装配全指南

1. 项目概述&#xff1a;为你的CLUE开发板“量体裁衣”如果你手头有一块Adafruit CLUE开发板&#xff0c;大概率会和我有同样的感受&#xff1a;这块板子功能强大&#xff0c;集成了屏幕、按钮、一堆传感器&#xff0c;但裸露的电路板和元器件总让人有点“心疼”&#xff0c;怕…...