30 VueComponent 事件的绑定

news2024/11/24 3:37:54

  前言 

 

这是最近的碰到的那个 和响应式相关的问题 特定的操作之后响应式对象不“响应“了 引起的一系列的文章 

主要记录的是 vue 的相关实现机制 

呵呵 理解本文需要 vue 的使用基础, js 的使用基础 

 测试用例

用例如下, 我们这里核心关注 事件的处理流程 

问题的调试

整个事件的处理是 dom -> ElButton -> VueComponent.emit -> HelloWorld.handleClick

从面向对象的角度上面来看, ElButton.handleClick 是一个模板方法, 一部分固定的组件本身的业务处理, 一部分留给使用实例的地方来进行处理 

ElButton 接管的是点击之后的所有业务, 他会做一些 ElButton 点击之后的自己需要处理的一部分业务, 然后还会 emit 一个 click 事件, 这个事件的处理是 留给具体的组件实例来关注的 [比如 HelloWorld 中的 el-button 就是一个组件实例]

我们这里从 dom基层 往上看

真实的再 dom 上面绑定事件 是在这里绑定, 这里封装了一层 function

这里面调用的传入的 handler, 传入的 handler 为一个 invoker, invoker 里面对应的是 el-button 的 handler 绑定的事件 

这里就是上面的 dom -> ElButton 的这步转换 

传入的函数为, 这里就是上面的 ElButton -> VueComponent.emit 的这步转换 

绑定 dom 事件这里, 是在创建 dom 元素的时候, 有一系列创建的时候调用的钩子 

这里 updateDOMListeners 中根据当前 VNode 来更新所有的 dom 的事件处理函数

这一这里有一层 createFnInvoker 的包装处理, 因此 回调函数是 invoker, 然后 invoker 再去调用的 handleClick

然后 VueComponent 的 事件处理器 到 VNode 的事件处理器 的转换是在组件对应的 render 函数

这部分就是 Vue 本身的事件处理相关 

从注册的 事件处理表 中获取 click 对应的回调列表, 然后 依次调用

这里的 vm._events[‘click’] 对应的函数是 封装了一层 invoker 之后的 HelloWorld.handleClick

这里就是上面的 VueComponent.emit -> HelloWorld.handleClick 的这步转换 

然后这个 ElButton 对应的 VueComponent 实例初始化的地方如下, initEvents 的地方会注册相关事件

初始化 Vue 组件的时候 注册 listener

这个可以再 VueComponent 的对象的 _events 上面查看, 这里注册的是 VueComponent 的事件管理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/575269.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c# cad二次开发 通过选择txt文件将自动转换成多段线

c# cad二次开发 通过选择txt文件将自动转换成多段线,txt样式如下 using System; using System.Collections.Generic; using System.Text; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.Runtime; usi…

chatgpt赋能python:Python改变图片大小对SEO的影响

Python改变图片大小对SEO的影响 简介 Python作为一门高效的编程语言,广泛应用于各个行业,并在图像处理领域中也有很多应用。其中一个常见的应用就是改变图片的大小。在SEO(搜索引擎优化)中,图片大小的优化对网站的排…

chatgpt赋能python:Python批量输出:提高工作效率的必备技能

Python批量输出:提高工作效率的必备技能 在日常工作中,我们往往需要批量处理某些数据。Python作为一种流行的编程语言,可以帮助我们快速地完成这项任务。本文将介绍Python批量输出的基本知识和实用技巧,帮助读者提高工作效率。 …

chatgpt赋能python:Python改变当前目录的SEO指南

Python改变当前目录的SEO指南 介绍 对于SEO来说,网站的目录结构和文件命名是非常重要的。良好的目录结构可以帮助搜索引擎更好地理解您的网站内容,而有意义的文件命名可以提高页面的可读性并有助于排名。 但在开发过程中,我们经常需要在不…

铁粉数量上一百了

铁粉数量上一百了 常写博客,常进步。

【Python】类与对象

知识目录 一、写在前面✨二、类与对象简介三、Car类的实现四、Date类的实现五、总结撒花😊 一、写在前面✨ 大家好!我是初心,希望我们一路走来能坚守初心! 今天跟大家分享的文章是 Python中面向对象编程的类与对象。 &#xff0…

一道北大强基题背后的故事(一)——从走弯路到看答案

早点关注我,精彩不错过! 在前面的系列文章《我的数学学习回忆录——一个数学爱好者的反思(二)》中,我从宏观层面回忆了我的数学学习历程和反思。其实,我和数学之间还有很多很多意识流一样的交流和故事&…

训练DeeplabV3+来分割车道线

本例我们训练DeepLabV3语义分割模型来分割车道线。 DeepLabV3模型的原理有以下一些要点: 1,采用Encoder-Decoder架构。 2,Encoder使用类似Xception的结构作为backbone。 3,Encoder还使用ASPP(Atrous Spatial Pyramid Pooling)&…

听听飞桨框架硬核贡献者如何玩转开源!

当仰望星空时,你在想什么?我在想象,未来可能是什么样子。从应用广泛的人工神经网络,到火遍全网的AIGC,创造新宇宙的人,相信永远看不到天花板。 在这些神奇的AI产品背后,有一个了不起的开源项目—…

滴滴时空供需系统的设计和演进

本篇文章分为: 1.背景介绍 2.系统框架的演进 2.1 旧系统框架的不足 2.2 新系统框架的优势 3.系统建设思考 3.1 存储治理 3.2 性能优化 3.3 研发提效:配置化能力升级 3.总结 1. 背景介绍 时空供需系统(SDS, supply and demand system)是为了满足滴滴网约车…

开箱即用的工具函数库xijs更新指南(v1.2.6)

xijs 是一款开箱即用的 js 业务工具库, 聚集于解决业务中遇到的常用函数逻辑问题, 帮助开发者更高效的开展业务开发. 接下来就和大家一起分享一下 v1.2.6 版本的更新内容以及后续的更新方向. 贡献者列表: 1. 计算变量内存calculateMemory 该模块主要由 zhengsixsix 贡献, 我们可…

leetcode练习(汇总插入区间)

文章目录 题目一:汇总区间题目二:插入区间 语言:python 工具:jupyuter 题目一:汇总区间 给定一个 无重复元素 的 有序 整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说&#xff0c…

“程序员,致敬!”

手机震动,提醒着我3年前参加研发的应用迎来了一次重大升级。我按下开源社区提供的合并请求按钮,与开源社区的朋友分享我对这个项目的改进。不久,一条消息提醒我合并请求已被其它社区成员审核通过。 这种远程协作、开源分享的方式是如今广泛存…

chatgpt赋能python:Python数值计算指南:为什么它是一种强大的工具

Python数值计算指南:为什么它是一种强大的工具 当谈到数值计算时,许多人所想到的编程语言都是MATLAB和R。然而,Python也在数值计算领域有着强大的地位。Python是一种令人难以置信的通用编程语言,它不仅为数据科学和机器学习提供了…

行人检测重识别yolov5+reid(跑通+界面设计)

行人检测重识别yolov5reid(跑通界面设计) 参考源代码: github 权重文件: 根据github上面的网盘进行权重下载: 检测:将 ReID_resnet50_ibn_a.pth放在person_search/weights文件下,yolov5s.pt放person_sear…

如何用海外代理辅助对接 ChatGPT

许多朋友问我有没有好用的海外代理。说实话,真的好用的并不多。 最近我了解到了一家还不错的海外代理,叫做 IPIDEA,我已经使用了一段时间了,觉得质量挺不错。 你可能知道,我最近在进行一些 ChatGPT 相关的研究&#xf…

DTW 2023:戴尔发力多云战略与边缘运营

近日,2023戴尔科技全球科技大会(Dell Technologies World,简称DTW)在美国拉斯维加斯如期而至。 作为戴尔科技集团一年一度的科技盛宴,本届DTW吸引了众多业界人士的关注。而作为本届大会的重头戏,戴尔科技集…

Spark学习笔记

1 spark简介 (1) spark是基于内存计算的分布式并行计算框架,如今已成为apache软件基金会最重要的三大分布式计算系统开源项目之一(Hadoop、Spark、Storm)。 (2) spark组件 (3) spark组件应用场景 Spark Streaming:提供流计算功能 Sparl SQL&#xff1…

Python实现循环的最快方式(for、while等速度对比)

众所周知,Python 不是一种执行效率较高的语言。此外在任何语言中,循环都是一种非常消耗时间的操作。假如任意一种简单的单步操作耗费的时间为 1 个单位,将此操作重复执行上万次,最终耗费的时间也将增长上万倍。 while 和 for 是 …

JavaCV - 图像暗通道去雾

一、效果图 二、实现原理 暗通道先验:首先说在绝大多数非天空的局部区域里,某一些像素总会有至少一个颜色通道具有很低的值,也就是说该区域光强是一个很小的值。所以给暗通道下了个数学定义,对于任何输入的图像J,其暗通道可以用下面的公式来表示:其中JC表示彩色图像每个…