vue项目 js发布订阅

news/2024/7/8 12:09:30 标签: javascript, vue.js, 开发语言
javascript">/**
 * 事件管理器
 * ==========
 *
 * *单例模式singleton* 通用的事件管理工具,可以处理各种事件触发和回调。
 *
 * 1. 事件根据topic 分类。
 * 2. 主题:即topic 。
 * 3. 内部将所有的事件按照topic 为key、事件回调函数为value 的map 来存储。
 * 4. subscribe: 订阅某事件。
 * 5. trigger: 触发某事件。
 */
export class EventCenter {
	/**
	 * 事件图。
	 */
	private _subscribeMap = new Map()

	public static singleton: EventCenter = new EventCenter()

	/**
	 * 订阅事件:增加一个事件到事件中心,同时将topic 添加到 topics 列表中。
	 *
	 * @param topic
	 * @param f 回调
	 */
	subscribe(topic, f) {
		const events = this._subscribeMap.get(topic)
		if (events) {
			events.push(f)
		} else {
			this._subscribeMap.set(topic, [f])
		}
	}

	/**
	 * 获取对应的事件列表。
	 *
	 * @param topic
	 */
	getEvents(topic) {
		return this._subscribeMap.get(topic)
	}

	/**
	 * 触发事件:触发所有订阅该名称的事件。
	 *
	 * @param topic
	 * @param data
	 */
	trigger(topic, data) {
		const events = this._subscribeMap.get(topic)
		if (events) {
			events.forEach((f) => {
				f(data, topic)
			})
		}
	}
}

订阅事件:

javascript">
EventCenter.singleton.subscribe('topic1', () => {
			// ....
		})

发布事件:

javascript">EventCenter.singleton.trigger('topic1', null)


http://www.niftyadmin.cn/n/5537202.html

相关文章

docker-compose搭建minio对象存储服务器

docker-compose搭建minio对象存储服务器 最近想使用oss对象存储进行用户图片上传的管理,了解了一下例如aliyun或者腾讯云的oss对象存储服务,但是呢涉及到对象存储以及经费有限的缘故,决定自己手动搭建一个oss对象存储服务器; 首先…

【vue3|第15期】Vue3模板语法入门指南

日期:2024年7月2日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^ 1.01365 = 37.7834;0.99365 = 0.0255 1.02365 = 1377.4083…

【日志分析】退出插件界面时无法卸载插件,错误解决方案pm clear 引起内存泄漏

问题描述 期望行为:退出插件时(即不使用时)将插件卸载——这样才满足插件化需求。 问题:为了解决插件不正常卸载的问题 ,在断连的时候强制pm clear 插件会导致宿主也自动关闭了,进而引起内存泄漏。 错误…

【Linux】服务器被work32病毒入侵CPU占用99%

文章目录 一、问题发现二、问题解决2.1 清楚病毒2.2 开启防火墙2.3 修改SSH端口2.4 仅使用凭据登录(可选) 一、问题发现 我的一台海外服务器,一直只运行一项服务(你懂的),但是前不久我发现CPU占用99%。没在…

input调用手机摄像头实现拍照功能vue

项目需要一个拍照功能&#xff0c;实现功能如下图所示:若使用浏览器则可以直接上传图片&#xff0c;若使用手机则调用手机摄像头拍照。 1.代码结构 <!--input标签--> <input ref"photoRef"type"file"accept"image/*"capture"envir…

efibootmgr 命令及其用途

efibootmgr 是一个在基于 UEFI 的系统上用于管理 EFI 引导项的工具。它允许用户查看、创建、删除和修改 EFI 引导项。以下是一些常见的 efibootmgr 命令及其用途&#xff1a; 查看当前引导项 sudo efibootmgr这个命令会列出所有当前配置的 EFI 引导项。 添加新的引导项 假设…

在C++中内存泄露的几种情况及解决内存泄露和指针越界有哪些方法?

一、在C中&#xff0c;内存泄露通常指的是程序在动态分配内存后未能正确地释放这些内存&#xff0c;导致系统资源被持续占用而无法被其他程序或该程序的后续部分使用。以下是C中内存泄露的几种常见情况&#xff0c;按照不同的原因进行分类和归纳&#xff1a; 忘记释放内存&…

海外金融机构银行保险证券数字化转型营销销售数字化成功案例讲师培训师讲授开户销售营销客户AI人工智能创新思维

金融机构需要数字营销的主要原因 数字银行、直接存款和移动网络的兴起让客户无需前往当地分行即可轻松办理银行业务。这些举措不仅提升了用户体验&#xff0c;也迫使银行向数字化世界迈进。 金融服务公司需要在数字营销渠道上保持稳固的地位&#xff0c;以免落后于大型机构。…