Vue组件中,可以使用 $emit$on$off 分别来分发、监听、取消监听事件实现组件通信,比较方便;

最近空闲时间手撸代码实现了发布订阅模式,可以进行组件通信。

话不多说,直接上代码

/*** Created by laichengliang on 2021/04/13.*/const center = {}// 事件监听
center.on = (eventName, callback) => {if (!center[eventName]) center[eventName] = []// 保存回调函数center[eventName].push(callback)
}// 事件触发
center.emit = (eventName, params) => {// 取出对应事件的回调函数const callbackArr = center[eventName]// 一一调用每一个回调事件callbackArr.map(callback => callback(params))
}// 事件移除
center.off = (eventName, callback) => {// 情况1:只传eventName,移除所有事件// 情况2:传eventName和callbackif (!callback) {center[eventName] = null} else {const callbackArr = center[eventName]// 删除指定的callback回调const result = callbackArr.filter(callbackItem => callback !== callbackItem)// 重新赋值center[eventName] = result}
}export default center

发布订阅模式 仿写Vue事件监听手写js实现相关推荐

  1. 设计模式之发布订阅模式

    发布--订阅模式简介 发布--订阅模式又叫观察者模式,它定义对象间的一种一对多的依赖关系,多个观察者对象都依赖于一个目标对象,当目标对象的状态发生变化时,所有依赖于这个对象的观察者对象都会收到通知. ...

  2. 【设计模式】692- TypeScript 设计模式之发布-订阅模式

    前言 在之前两篇自测清单中,和大家分享了很多 JavaScript 基础知识,大家可以一起再回顾下~ 本文是我在我们团队内部"「现代 JavaScript 突击队」"分享的一篇内容 ...

  3. Spring - 设计模式 - 发布订阅模式

    目录 1.Spring的发布订阅模式组成 1.1场景说明 1.2创建UserUpdateEvent 事件 1.3创建监听类 1.4发布UserUpdateEvent 事件 1.Spring的发布订阅模 ...

  4. JavaScript 设计模式之发布-订阅模式(上)

    什么是发布订阅模式? 发布-订阅模式又叫观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知.在JavaScript开发中,我们一般用事件模型来替 ...

  5. 事件监听watch框架vue2.x与3.x都适用

    前言: 目前正在学习vue或者对vue部分使用不太熟悉的可以跟着的我文章,打开编辑器,安装vue-cli一步步的练习,不会安装vue-cli脚手架的小伙伴可以先看这篇文章https://blog.cs ...

  6. Vue响应式原理探究之“发布-订阅”模式

    前言 在面试题中经常会出现与"发布订阅"模式相关的题目,比如考察我们对Vue响应式的理解,也会有题目直接考验我们对"发布订阅"模式或者观察者模式的理解,甚至还会 ...

  7. 从发布-订阅模式到Vue响应系统

    概念 发布-订阅模式又称为观察者模式,它定义的是一种一对多的依赖关系,当一个状态发生改变的时候,所有以来这个状态的对象都会得到通知. 生活中的发布-订阅模式 上面事发布-订阅模式的一个比较正式的解释, ...

  8. 前端Vue之发布订阅模式

    目录 1.什么是发布订阅模式 2.实现简单的发布订阅 3.收集更新函数 4.触发更新函数 5.总结 一个响应式数据可能会有多个视图部分都需要依赖,也就是响应式数据变化之后,需要执行的更新函数可能不止一 ...

  9. 深入Vue原理_全面剖析发布订阅模式

    文章目录 发布订阅模式优化 优化思路思考 理解发布订阅模式(自定义事件) 收集更新函数 触发更新函数 6.5 总结 总结 写在最后 本期推荐 欢迎各位小伙伴们! 为大家推荐一款刷题神奇哦 点击链接访问 ...

最新文章

  1. qcom Android Camera【转】
  2. bzoj 2179 FFT快速傅立叶
  3. Openstack安装过程中出现的一些问题及解决
  4. 《系统集成项目管理工程师》必背100个知识点-31WBS的分解原则
  5. 经典C语言程序100例之七
  6. 【实用】C#测试web服务是否可用
  7. java环境_配置java环境变量
  8. java 对象池 实现_Java对象池技术的原理及其实现
  9. springMVC怎么改变form的提交方式为put或者delete
  10. SolarWinds 公司:Web Help Desk 实例正遭攻击
  11. 首次c#蓝牙开发踩坑记录
  12. fckeditor php 不显示,PHP Fckeditor上传文件(或图片)中文显示为乱码的解决方法
  13. 不同项目的测试计划可以复用吗_【app测试计划】移动app测试项目实践.doc
  14. Python实践基于直方图的梯度提升集成方法
  15. 前端项目-尚品会-来自b站尚硅谷视频
  16. Windows Xp sp2 升级为 sp3
  17. SWFObject Flash 增强插件
  18. scrapy15.0,scrapy.contrib.downloadermiddleware.useragent` is deprecated,旧模块被弃用解决办法.
  19. html中图片旋转木马,教你怎么用CSS3做一个图片的旋转木马效果
  20. 什么是马甲包?有什么作用?

热门文章

  1. 对渠道流量异常情况的分析
  2. JVM实用参数(八)GC日志
  3. Javaweb学习笔记——(二十二)——————文件上传、下载、Javamail
  4. BIOS设置开机密码
  5. JavaScript与Java的关系(联系与区别)
  6. linux svn 常用命令
  7. android 解析雅虎天气
  8. [置顶] NoSQl mongodb数据库 配置篇
  9. 【中文】Joomla1.7扩展介绍之eXtplorer(文件管理器)
  10. 给年轻人的30条忠告【转自[蓉儿]的QQ空间】