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

vue2与vue3的全局通信插件,如何实现自定义的插件

Vue 2 自定义插件(事件总线实现)

在 Vue 2 中,可以通过事件总线来实现全局通信。以下是创建一个简单事件总线插件的步骤:

  1. 创建插件文件 eventBus.js

// eventBus.js
import Vue from 'vue';const EventBus = new Vue();export default {install(Vue) {Vue.prototype.$bus = EventBus;  // 将 EventBus 添加到 Vue 原型上},
};

2.在主文件中引入插件并使用

// main.js
import Vue from 'vue';
import App from './App.vue';
import EventBus from './eventBus';Vue.use(EventBus);new Vue({render: (h) => h(App),
}).$mount('#app');

3.在组件中使用

  • 触发事件

this.$bus.$emit('my-event', { data: 'Hello, World!' });

监听事件

this.$bus.$on('my-event', (payload) => {console.log(payload.data);
});

Vue 3 自定义插件(使用 provideinject 实现)

在 Vue 3 中推荐使用 provideinject API 来进行全局通信,可以实现更灵活的插件结构。

  1. 创建插件文件 eventBus.js

// eventBus.js
import { reactive } from 'vue';const EventBus = reactive({events: {},on(event, callback) {if (!this.events[event]) {this.events[event] = [];}this.events[event].push(callback);},off(event, callback) {if (!this.events[event]) return;this.events[event] = this.events[event].filter(cb => cb !== callback);},emit(event, payload) {if (!this.events[event]) return;this.events[event].forEach(callback => callback(payload));},
});export default {install(app) {app.provide('eventBus', EventBus);},
};

2.在主文件中引入插件并使用

// main.js
import { createApp } from 'vue';
import App from './App.vue';
import EventBus from './eventBus';const app = createApp(App);
app.use(EventBus);
app.mount('#app');

3.在组件中使用

  • 触发事件:

  • import { inject } from 'vue';setup() {const eventBus = inject('eventBus');function triggerEvent() {eventBus.emit('my-event', { data: 'Hello, World!' });}return { triggerEvent };
    }
    

    监听事件:

import { inject, onMounted, onUnmounted } from 'vue';setup() {const eventBus = inject('eventBus');function handleEvent(payload) {console.log(payload.data);}onMounted(() => {eventBus.on('my-event', handleEvent);});onUnmounted(() => {eventBus.off('my-event', handleEvent);});
}


http://www.mrgr.cn/news/68049.html

相关文章:

  • [复健计划][紫书]Chapter 7 暴力求解法
  • 计算机网络综合题
  • Ubuntu - 进入紧急模式,无法进入桌面
  • Git 的分支管理
  • 设计模式小结一工厂模式
  • 数据结构 ——— 链式二叉树oj题:相同的树
  • 杨辉三角,洗牌算法
  • 探索C语言数据类型
  • 前端基础-html-注册界面
  • [Docker#1] 专栏前言 | 亿级高并发架构演进之路
  • 【大数据学习 | kafka高级部分】kafka的数据同步和数据均衡
  • 经典网络模型
  • brainpy 动力学编程基础
  • 最新kubernetes搭建(k8s)(已成功搭建)
  • 【科普】卷积、卷积核、池化、激活函数、全连接分别是什么?有什么用?
  • 【软考】错题总结:1106
  • [CUDA] 判断一个指针是GPU还是CPU
  • 远程控制项目第四天 功能实现
  • Claude Prompt:博弈天平|缘起自李继刚老师的提示词
  • 使用PyQt5设计一个简易计算器
  • 【测试】【Debug】pytest运行后print没有输出
  • CPU Study-Multi-Port Cache
  • golang函数
  • 使用开源Embedding模型嵌入高维空间向量
  • Linux命令--paste
  • 【大模型系列】Grounded-VideoLLM(2024.10)