模式实现vue事件总线

前言:发布订阅模式,还具有解除订阅功能

模拟实现

function fn1(n1, n2) {console.log('first add', n1, n2)}
function fn2(n1, n2) {console.log('second add', n1, n2)}
function fn3(n1, n2) {console.log('third add', n1, n2)}class MYVue {constructor() {this._events = Object.create(null) // 存放各种自定义事件的对象}$on(event, fn) {if (Array.isArray(event)) {event.forEach(v => {this.$on(v, fn)})} else {if (!this._events[event]) this._events[event] = []this._events[event].push(fn)}}$off(event, fn) {if (!arguments.length) { // 移除所有事件this._events = Object.create(null)return}if (Array.isArray(event)) {event.forEach(v => {this.$off(v, fn)})return}const item = this._events[event]if (!item) returnif (!fn) { // 移除某个事件所有订阅的函数this._events[event] = nullreturn}const it = item.findIndex(v => v === fn)if (it !== -1) item.splice(it,1)}$once(event, fn) {function on() {this.$off(event, on)fn.apply(this, arguments)}on.fn = fnthis.$on(event, on)}$emit(event) {let item = this._events[event]if (!item) returnitem.forEach(fn => {fn.apply(this, [...arguments].slice(1))})}
}const myvue = new MYVue()
myvue.$on('first',fn1)
myvue.$on('second',fn2)
myvue.$once('third',fn3)
myvue.$emit('first', 20, 30)
myvue.$emit('second', 60, 70)
myvue.$emit('third', 100, 200)

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

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

相关文章

22.保护性暂停扩展(一对一)

如果需要多个类之间使用GuardedObject对象,作为参数传递不是很方便,因此设计一个解耦的中间类,这样不仅能够解耦结果的等待者和结果生产者,还能够支持多个任务的管理。 Futures就好比居民楼一层的信箱,每个信箱有房间的…

HarmonyOS实战开发-如何使用首选项能力实现一个简单示例。

介绍 本篇Codelab是基于HarmonyOS的首选项能力实现的一个简单示例。实现如下功能: 创建首选项数据文件。将用户输入的水果名称和数量,写入到首选项数据库。读取首选项数据库中的数据。删除首选项数据文件。 最终效果图如下: 相关概念 首选…

Facebook如何使用增强技术提升广告效果?

AR in AD - case study 脸书2021年宣布了引入AR的新方法,以推动其应用套件中的产品发现和购买。但他们首先考虑是技术。据脸书称,技术一直是增强现实在其应用程序中更广泛使用的主要障碍。这就是为什么它现在正在做出改变,使企业主和广告商更…

TextMeshPro图文混排的两种实现方式,不打图集

TMP图文混排 方案一:TMP自带图文混排使用方法打包图集使用 方案二:不打图集,可以使用任何图片 接到一个需求,TextMeshPro 图文混排。 方案一:TMP自带图文混排 优点布局适应优秀,字体左中右布局位置都很不错…

Web常见标签属性

应用软件&#xff1a;c/s&#xff08;客户端与服务端&#xff09; b/s&#xff08;服务器与浏览器架构&#xff09;web前端&#xff1a;html5、css3、JavaScriptHtml5&#xff1a;超文本标记语言 超链接标签 语法规范<标签名> marquee 标签之间可以嵌套属性&#xff1a;…

Redis中的事务机制

Redis中的事务机制 概述。 事务表示一组动作&#xff0c;要么全部执行&#xff0c;要么全部不执行。例子如下。 Redis提供了简单的事务功能&#xff0c;讲一组需要一起执行的命令放到multi和exec两个命令之间。multi命令代表事务开始&#xff0c;exec命令代表事务结束&#x…

【项目】均衡代码评测

TOC 目录 项目介绍 开发环境 主要技术 项目实现 公共模块 日志 工具类 编译运行模块 介绍 编译 运行 编译和运行结合起来 业务逻辑模块 介绍 MVC模式框架 模型&#xff08;Model&#xff09; 视图&#xff08;View) 控制器&#xff08;Controller&#xff09…

使用html做一个2048小游戏

下载地址: https://pan.xunlei.com/s/VNtiF13HxmmE4gglflvS1BUhA1?pwdvjrt# 提取码&#xff1a;vjrt”

Linux文件系统 底层原理

linux文件、目录、Inode inode负责文件的元数据和数据存储&#xff0c;文件存储块负责实际数据的存储&#xff0c;而目录文件维护文件名和inode之间的联系。 1. 用户空间到内核空间 首先&#xff0c;当用户程序请求打开一个文件时&#xff08;例如使用open系统调用&#xff09…

C/C++ 一些使用网站收集...

C/C 标准 各种语言协议标准文档 open-std.org 网站 C语言标准文档 open-std.org C基金会网站 C/C 标准库网站 c/c 标准库 cplusplus.com 网站 c/c标准库 cppreference.com 网站 C Core Guidelines【isocpp.org】 C/C 发展 C现有状态及未来规划【isocpp.org】

Excel 打开后提示:MicrosoftExcel无法计算某个公式。在打开的工作簿中有一个循环引用...

目录预览 一、问题描述二、原因分析三、解决方案四、参考链接 一、问题描述 MicrosoftExcel无法计算某个公式。在打开的工作簿中有一个循环引用&#xff0c;但无法列出导致循环的引I用。请尝试编辑上次输入的公式&#xff0c;或利用“撤消”命令删除该公式&#xff0c;如下图&…

Matplotlib如何显示多张图片(管理多个子图)

Matplotlib 可以使用 subplot 或 subplots 方法来创建子图&#xff0c;从而在同一窗口中显示多张图片。以下是一些示例代码&#xff0c;展示如何使用 Matplotlib 显示多张图片&#xff1a; 1.使用 subplot import matplotlib.pyplot as plt import matplotlib.image as mpi…

微服务(基础篇-003-Nacos)

目录 Nacos注册中心&#xff08;1&#xff09; 认识和安装Nacos&#xff08;1.1&#xff09; Nacos快速入门&#xff08;1.2&#xff09; 服务注册到Nacos(1.2.1) Nacos服务分级存储模型&#xff08;1.3&#xff09; 配置集群&#xff08;1.3.1&#xff09; 根据集群修改…

pta L1-004 计算摄氏温度

L1-004 计算摄氏温度 分数 5 全屏浏览 切换布局 作者 陈建海 单位 浙江大学 给定一个华氏温度F&#xff0c;本题要求编写程序&#xff0c;计算对应的摄氏温度C。计算公式&#xff1a;C5(F−32)/9。题目保证输入与输出均在整型范围内。 输入格式: 输入在一行中给出一个华氏…

如何用Airtest脚本连接无线Android设备?

之前我们已经详细介绍过如何用AirtestIDE无线连接Android设备&#xff0c;它的关键点在于&#xff0c;需要先 adb connect 一次&#xff0c;才能点击 connect 按钮无线连接上该设备&#xff1a; 但是有很多同学&#xff0c;在使用纯Airtest脚本的形式连接无线设备时&#xff0c…

odoo中,使用paramiko库ssh连接Linux

在 Python 中&#xff0c;可以使用 Paramiko 库来实现 SSHClient 连接。Paramiko 是一个用于远程登录、文件传输和自动化的 SSH 客户端库。 import paramiko# 创建 SSHClient 对象 ssh paramiko.SSHClient()# 设置自动添加主机密钥 ssh.set_missing_host_key_policy(paramiko.…

K8s-网络原理-下篇

引言 本文是《深入剖析 K8s》的学习笔记&#xff0c;相关图片和案例可从https://github.com/WeiXiao-Hyy/k8s_example中获取&#xff0c;欢迎Star! K8s 的网络隔离: NetWorkPolicy K8s 如何考虑容器之间网络的“隔离” -> NetWorkPolicy 以下是一个 NetWorkPolicy 的定义…

气候模型与大模型结合的高精度天气预报技术研究

1. 背景介绍 随着全球气候变化的加剧&#xff0c;天气预报的准确性变得越来越重要。传统的气候模型在预测长期气候变化方面取得了显著进展&#xff0c;但在短期天气预报方面仍存在一定的局限性。近年来&#xff0c;随着人工智能技术的发展&#xff0c;尤其是大模型在自然语言处…

Android开发 --- Android12外部存储权限问题

1.问题 Android12使用如下权限&#xff0c;将不会获得读写文件的权限 <uses-permission android:name"android.permission.WRITE_EXTERNAL_STORAGE" /> 2.解决 if (!Environment.isExternalStorageManager()) {Intent intent new Intent(Settings.ACTION_M…

将数据转换成xml格式的文档并下载

现在有一个实体类对象的集合&#xff0c;需要将它们转换为xml文档&#xff0c;xml文档就是标签集合的嵌套&#xff0c;例如一个学生类&#xff0c;有姓名、年龄等&#xff0c;需要转换成一下效果&#xff1a; <student><age>14</age><name>张三</na…