vue3如何使用eventBus订阅发布模式

 更新时间:2022年09月01日 09:46:43   作者:别拿bug搞偷袭  
EventBus是一种发布/订阅事件设计模式的实践,下面这篇文章主要给大家介绍了关于vue3如何使用eventBus订阅发布模式的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

Ⅰ. 什么是eventBus?

通俗的讲,就是在任意一个组件,想把消息(参数) -> 传递到任意一个组件 ,并执行一定逻辑。

Ⅱ. vue3 如何使用

eventBus vue3中没有了,eventBus,所以我们要自己写,但是非常简单。

步骤一 (eventBus 容器)

在src目录,创建个bus文件夹,存放 自己写的 bus.js ;

编写 bus.js => 在class 原型上绑定三个 (订阅,取消订阅,发布)函数;

// bus.js
class Bus {
	constructor() {
		this.list = {};  // 收集订阅
	}
	// 订阅
	$on(name, fn) {
		this.list[name] = this.list[name] || [];
		this.list[name].push(fn);
	}
	// 发布
	$emit(name, data) {
		if (this.list[name]) {
      		this.list[name].forEach((fn) => {	fn(data);   });
    	}
	}
	// 取消订阅
	$off(name) {
		if (this.list[name]) {
			delete this.list[name];
		}
	}
}
export default new Bus;

订阅者(on),讲函数放入 list 中 => 等待发布者(emit),传参去调用;

由于函数是对象,内存地址未发生变化,还在在订阅者(on)组件中执行。

步骤二 ( 订阅者 )

在 comA.vue 中订阅;

订阅只是 存放函数,并未执行,等发布后才会执行;

<template>
  <div>
 	{{ name }} --- {{ age }}
  </div>
</template>
<script>
import {ref , onUnmounted} from 'vue';
import Bus from '../bus/bus.js';
export default {
  setup() {
       const name = '张三';
       const age = ref(18)
       Bus.$on('addAge',({ num })=>{    age.value = num;    })
       
       //组件卸载时,取消订阅
	   onUnmounted( () => { Bus.$off('addAge') } )
 	}
 }
</script>

在离开组件(onUnmounted)时 ,将注册进去的 ,订阅函数的数组删除,避免存放越来越多。

步骤三 ( 发布者 )

在 comB.vue 中发布;

调用订阅 并传参;

<template>
    <button @click="fabu">发布</button>
</template>
<script>
import Bus from '../eventBus/Bus.js'
export default {
  setup() {
	 function fabu(){
 		Bus.$emit('addAge',{age:'19'});
	 }
   }
 }
</script>

发布后,在订阅者的组件就会执行,注意对应的 订阅和发布的name 要相同。

总结

到此这篇关于vue3如何使用eventBus订阅发布模式的文章就介绍到这了,更多相关vue3 eventBus订阅发布模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue3使用v-html实现文本关键词变色处理

    Vue3使用v-html实现文本关键词变色处理

    遍历文本内容,找到关键词,并使用某种方法更改其字体样式,经过搜寻资料决定采用v-html实现,但是v-html本身并不安全,有安全性风险且影响性能,所以谨慎使用,本文给大家介绍了Vue3使用v-html实现文本关键词变色处理,需要的朋友可以参考下
    2024-06-06
  • VueJS 组件参数名命名与组件属性转化问题

    VueJS 组件参数名命名与组件属性转化问题

    这篇文章主要介绍了VueJS 组件参数名命名与组件属性转化问题,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-12-12
  • Vue验证码60秒倒计时功能简单实例代码

    Vue验证码60秒倒计时功能简单实例代码

    这篇文章主要介绍了Vue验证码60秒倒计时功能简单实例代码,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-06-06
  • VUE的history模式下除了index外其他路由404报错解决办法

    VUE的history模式下除了index外其他路由404报错解决办法

    在本篇文章里小编给大家分享的是关于VUE的history模式下除了index外其他路由404报错解决办法,对此有需要的朋友们可以学习下。
    2019-08-08
  • vue3实现按钮权限管理的项目实践

    vue3实现按钮权限管理的项目实践

    在做后台管理系统时,经常会有权限管理的功能,本文主要介绍了vue3实现按钮权限管理的项目实践,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • 详解vue-cli 脚手架项目-package.json

    详解vue-cli 脚手架项目-package.json

    本篇文章主要介绍了详解vue-cli 脚手架项目-package.json,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • ant design vue导航菜单与路由配置操作

    ant design vue导航菜单与路由配置操作

    这篇文章主要介绍了ant design vue导航菜单与路由配置操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • vue路由组件按需加载的几种方法小结

    vue路由组件按需加载的几种方法小结

    这篇文章主要介绍了vue路由组件按需加载的几种方法小结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • vue3-HTTP请求方式

    vue3-HTTP请求方式

    这篇文章主要介绍了vue3-HTTP请求方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • vue.js通过自定义指令实现数据拉取更新的实现方法

    vue.js通过自定义指令实现数据拉取更新的实现方法

    数据拉取更新这个功能相信大家基本都见过,但是如果要做起来却不止如何做起,所以这篇文章给大家分享了vue.js通过自定义指令实现的方法,阅读本文需要对vue有一定理解,有需要的朋友们下面来一起看看吧。
    2016-10-10

最新评论