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

vue组件跳层级时的事件处理 (事件的广播与派发)

相信大家一定用过elementui这个组件库,那么对里面的表单组件一定不陌生。

最常用的几个组件就是el-formel-form-itemel-input,表单校验时的错误提示功能是交给el-form-item来实现的。当el-input填写时触发校验规则,验证失败后通知el-form-item进行错误信息提示。

他们大多时候是处于爷——父——子的关系,但是这个关系并不是完全固定的。我自己在使用的时候经常也不仅仅只使用这三个组件,简单举个例子:

<el-form><el-form-item><MyDiv><el-input></el-input></MyDiv></el-form-item>
</el-form>

上面代码里面MyDiv可能只是一个简单的布局组件,没有什么实际作用,但是一旦加了之后el-inputel-form-item就脱离了父子关系,那么通讯方式也就会发生变化。如果之前el-input校验规则失败后使用的是this.$parent的方式去触发校验提示的话,当我们在他们之间添加其他组件后就会失效。并且这是不可控的,你无法预料他们可能被如何实现,甚至之间间隔了多少个组件,若是强硬的将两个组件封装在一起又会显得臃肿冗余,不符合组件封装的规范,所以这个时候就可以使用派发来实现。

dispatch 派发

我们直接看elementui源码时如何使用派发的方式解决我们上面提到的问题

dispatch(componentName, eventName, params) {var parent = this.$parent || this.$root;var name = parent.$options.componentName;while (parent && (!name || name !== componentName)) {parent = parent.$parent;if (parent) {name = parent.$options.componentName;}}if (parent) {parent.$emit.apply(parent, [eventName].concat(params));}}

可以看出elementui其实就是遍历了父级组件,一直遍历拿到想要的组件为止。找到需要的组件后直接$emit派发事件,那么肯定在他们父级组件内部一定会有$on进行着事件监听。需要注意的是componentName这个属性是elementui自己在组件添加的,我们使用的时候直接使用name即可,name就是我们定义组件时自己定义的name

broadcast 广播

broadcast(componentName, eventName, params) {this.$children.forEach(child => {var name = child.$options.componentName;if (name === componentName) {child.$emit.apply(child, [eventName].concat(params));} else {broadcast.apply(child, [componentName, eventName].concat([params]));}});
}

broadcast与dispatch 实现逻辑没什么区别,只是一个向上遍历进行派发,一个向下遍历进行广播。

相关文章:

vue组件跳层级时的事件处理 (事件的广播与派发)

相信大家一定用过elementui这个组件库&#xff0c;那么对里面的表单组件一定不陌生。 最常用的几个组件就是el-form&#xff0c;el-form-item&#xff0c;el-input&#xff0c;表单校验时的错误提示功能是交给el-form-item来实现的。当el-input填写时触发校验规则&#xff0c;…...

毫米波雷达 TI IWR6843 官方测试程序(Out Of Box Demo)

1.硬件准备 1.IWR6843AOP板子 2.两个USB转串口模块&#xff08;因为我的是自己做的板子&#xff0c;板子上没有集成USB转串口芯片&#xff09; 2.软件准备 1.最新版本的CCS&#xff0c;注意后缀没有THEIA https://www.ti.com/tool/CCSTUDIO?DCMPdsp_ccs_v4&HQSccs 2.最…...

中大标了 5813万

汗水浇灌收获&#xff0c;实干笃定前行。刚刚进入八月&#xff0c;鸿雁政企事业部就传来了特大喜讯——鸿雁中标浙江丽水国际会展中心电线电缆项目&#xff0c;中标总金额达5813万&#xff01;一举刷新鸿雁单体项目中最高中标金额。 据了解&#xff0c;浙江丽水国际会展中心项…...

Java电子招投标采购系统源码-适合于招标代理、政府采购、企业采购、等业务的企业 tbms

​ 功能描述 1、门户管理&#xff1a;所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含&#xff1a;招标公告、非招标公告、系统通知、政策法规。 2、立项管理&#xff1a;企业用户可对需要采购的项目进行立项申请&#xff0c;并提交审批&#xff0c;查…...

RocketMQ安装和简单使用

说明&#xff1a;RocketMQ与RabbitMQ一样&#xff0c;是分布式架构中的一个组件&#xff0c;用来解决微服务之间的异步调用。同类的还有两个&#xff0c;各自的特点如下&#xff1a; Rocket结构 服务启动时 发送消息时 其中各个部分的功能如下&#xff1a; &#xff08;1&…...

Codeforces Round 869 (Div. 2)

C 求最长似递增子序列 是子序列&#xff01; 我误以为是最长上升子序列的变式&#xff0c;但是这个题目和那个题目&#xff0c;并不是很一样 我们选择观察样例&#xff1a; 1 2 4 3 3 5 6 2 1 其实样例当中就给我们了答案&#xff0c;我们能感觉的出来&#xff0c;应该是用长…...

【雕爷学编程】MicroPython动手做(28)——物联网之Yeelight 3

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…...

CTFSHOW php 特性

web89 数组绕过正则 include("flag.php"); highlight_file(__FILE__);if(isset($_GET[num])){$num $_GET[num]; get numif(preg_match("/[0-9]/", $num)){ 是数字 就输出 nodie("no no no!");}if(intval($num)){ 如果是存在整数 输出 flagecho …...

2、认识O(nlogn)的排序

归并排序 分两半,谁小拷贝谁 public class Test{public static void mergeSort(int[] arr) {if (arr == null || arr.length < 2) {return;}mergeSort(arr, 0, arr.length - 1);}public static void mergeSort(int[] arr, int l, int r) {if (l == r) {return;}int mid =…...

什么是 HTTP 长轮询?

什么是 HTTP 长轮询&#xff1f; Web 应用程序最初是围绕客户端/服务器模型开发的&#xff0c;其中 Web 客户端始终是事务的发起者&#xff0c;向服务器请求数据。因此&#xff0c;没有任何机制可以让服务器在没有客户端先发出请求的情况下独立地向客户端发送或推送数据。 为…...

操作系统用户态和核心态和CPU上下文切换

目录 操作系统用户态和核心态用户态和核心态操作系统用户态和核心态是如何交换的系统调用 CPU上下文什么是CPU上下文和CPU上下文切换CPU为什么要进行上下文切换 操作系统用户态和核心态 用户态和核心态 操作系统两种状态&#xff1a;用户态和内核态。 操作系统的用户态和内核态…...

TSINGSEE青犀视频汇聚平台EasyCVR视频广场面包屑侧边栏支持拖拽操作

TSINGSEE青犀视频汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有GB28181、RTSP/Onvif、RTMP等&#xff0c;以及厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等&#xff0c;能对外分发RTSP、RTMP、FLV、HLS、Web…...

RocketMQ发送消息超时异常

说明&#xff1a;在使用RocketMQ发送消息时&#xff0c;出现下面这个异常&#xff08;org.springframework.messging.MessgingException&#xff1a;sendDefaultImpl call timeout……&#xff09;&#xff1b; 解决&#xff1a;修改RocketMQ中broke.conf配置&#xff0c;添加下…...

WordPress做权重站:二级目录伪静态写法

我喜欢用WordPress建站&#xff0c;但是每个网站我都会写3个以上的二级目录&#xff0c;为什么了&#xff0c;因为WordPress数据量过大会导致数据库很大很卡&#xff0c;所以这种做法可以减轻数据库的负荷。我一般每个目录的文章达到15万篇就不会再更新了&#xff0c;3个目录加…...

浅谈下API初步认知

当我们谈论API&#xff0c;我们指的是应用程序接口&#xff08;Application Programming Interface&#xff09;。API允许不同的软件应用程序之间互相通信和交互。它定义了一组规定和协议&#xff0c;用于确定数据传输和请求的格式、方法和功能。 API的作用是在软件开发中提供一…...

LeetCode--剑指Offer75(2)

目录 题目描述&#xff1a;剑指 Offer 58 - II. 左旋转字符串&#xff08;简单&#xff09;题目接口解题思路1代码解题思路2代码 PS: 题目描述&#xff1a;剑指 Offer 58 - II. 左旋转字符串&#xff08;简单&#xff09; 字符串的左旋转操作是把字符串前面的若干个字符转移到…...

基于vue-cli3的vue项目 通过postcss-pxtorem 实现px自动转换成rem并解决版本问题

1、npm安装依赖 npm install lib-flexible --save npm install postcss-pxtorem --save-dev 2、引入lib-flexible 在项目入口文件main.js 中引入lib-flexible import "lib-flexible/flexible.js"; 3、 配置postcss-pxtorem vue-cli3 项目postcss-pxtorem的…...

前端开发常用的方法封装(二)

1.将阿拉伯数字翻译成中文的大写数字 export const numberToChinese (num) > {let AA new Array("零","一","二","三","四","五","六","七","八","九","十&q…...

【Java】Springboot脚手架生成初始化项目代码

Springboot配置生成初始化项目代码可以通过mvn的mvn archetype:generate 和阿里云原生应用脚手架&#xff08;地址&#xff09;、spring官方提供的start初始化生成页面(地址&#xff09;。 1、mvn archetype:generate 通过mvn选择对应的脚手架可以快速生成初始化代码&#xf…...

LLaMA系列 | LLaMA和LLaMA-2精简总结

文章目录 1、LLaMA1.1、模型结构1.2、训练方式1.3、结论 2、LLaMA-22.1、相比LLaMA1的升级2.3、模型结构2.3.1、MHA, MQA, GQA区别与联系 2.4、训练方式 1、LLaMA &#x1f525; 纯基座语言模型 《LLaMA: Open and Efficient Foundation Language Models》&#xff1a;https:/…...

5个Adobe-GenP实用技巧:从安装到完美运行Photoshop

5个Adobe-GenP实用技巧&#xff1a;从安装到完美运行Photoshop 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP Adobe-GenP是一款强大的Adobe Creative Cloud通用补丁…...

Dynamic-Datasource连接池监控指标:10个关键指标调用指南

Dynamic-Datasource连接池监控指标&#xff1a;10个关键指标调用指南 【免费下载链接】dynamic-datasource dynamic datasource for springboot 多数据源 动态数据源 主从分离 读写分离 分布式事务 项目地址: https://gitcode.com/gh_mirrors/dy/dynamic-datasource Dy…...

AI写教材诀窍大公开!掌握这些方法,轻松搞定低查重教材编写

AI助力教材写作&#xff1a;提升效率与质量 在撰写教材的过程中&#xff0c;总是能一一踩到“慢节奏”的陷阱。尽管框架和资料准备得十分充分&#xff0c;但在撰写内容时却常常遇到障碍。往往是简单的一句话&#xff0c;却要考虑半个小时才满意&#xff1b;章节间的衔接也让人…...

别再死记硬背了!用Synopsys DC和ICC搞懂数字IC设计全流程(附避坑清单)

数字IC设计实战&#xff1a;从Synopsys工具链透视高效学习路径 刚接触数字IC设计的工程师常陷入一个怪圈&#xff1a;背了大量DC和ICC命令&#xff0c;面对真实项目却无从下手。这就像背熟了菜谱却做不出佳肴——问题不在于记忆容量&#xff0c;而在于理解烹饪原理和规避操作误…...

GitHub Copilot 默认启用训练之后 企业安全如何应对

文章目录前言一、这次政策改动&#xff0c;到底改了什么二、为什么企业不能只看“Business 和 Enterprise 不受影响”三、content exclusion 为什么挡不住所有风险四、从 IDE 到 Agent&#xff0c;企业研发边界已经变了五、企业现在就该做的几件事总结前言 GitHub 这次关于 Co…...

告别手动配置:用STM32CubeMX和Arduino库玩转ADS1115与STM32 ADC

告别手动配置&#xff1a;用STM32CubeMX和Arduino库玩转ADS1115与STM32 ADC 在嵌入式开发的世界里&#xff0c;ADC&#xff08;模数转换器&#xff09;就像一位不知疲倦的翻译官&#xff0c;将模拟世界的连续信号转换为数字世界能理解的离散数值。然而&#xff0c;传统的寄存器…...

从零开始掌握Retrieval-based Voice Conversion WebUI:AI语音转换完整指南

从零开始掌握Retrieval-based Voice Conversion WebUI&#xff1a;AI语音转换完整指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI 语音数据小于等于10分钟也可以用来训练一个优秀的变声模型&#xff01; 项目地址: https://gitcode.com/GitHub_Trending/re/Re…...

智能求职工具GetJobs:让你的投递效率提升300%的全流程指南

智能求职工具GetJobs&#xff1a;让你的投递效率提升300%的全流程指南 【免费下载链接】get_jobs &#x1f4bc;【找工作最强助手】全平台自动投简历脚本&#xff1a;(boss、前程无忧、猎聘、拉勾、智联招聘) 项目地址: https://gitcode.com/gh_mirrors/ge/get_jobs 每天…...

从微信聊天到在线游戏:聊聊UDP和TCP在你手机App里的那些‘小心思’

从微信聊天到在线游戏&#xff1a;聊聊UDP和TCP在你手机App里的那些‘小心思’ 每天我们都在用手机App聊天、打游戏、看视频&#xff0c;但很少有人注意到这些应用背后隐藏的网络协议选择。为什么微信文字消息总能准确送达&#xff0c;而语音通话偶尔会断断续续&#xff1f;为…...

AI 编程时代来了:为什么每个开发者都要学会用 AI 写代码

2026 年&#xff0c;不会用 AI 写代码的开发者&#xff0c;就像 2010 年不会用 Google 的程序员一样——不是不能工作&#xff0c;而是效率会被远远甩在后面。先看一组数字 根据 GitHub 2026 年开发者调查报告&#xff1a; 73% 的开发者在工作中使用了 AI 编程工具55% 的代码由…...