使用全局事件总线实现任意组件间的通讯

本文以vue2中爷孙组件通讯为例,需求是点击孙组件的按钮,实现关闭爷组件的弹窗。

全局事件总线是通过Vue实例的事件系统来实现组件之间的通讯,可以方便地在任何组件中进行事件的触发和监听。

以下是使用全局事件总线实现爷孙组件通讯的步骤:

  1. 创建一个新的Vue实例作为全局事件总线,可以将其定义在一个单独的文件中,例如event-bus.js

    javascript 复制代码
    // event-bus.js
    
    import Vue from 'vue';
    export const EventBus = new Vue();

2.在爷爷组件中使用EventBus.$on监听事件,并在事件处理函数中关闭对话框:

javascript 复制代码
// Grandparent.vue

<template>
  <div>
    <Dialog :visible="dialogVisible"></Dialog>
  </div>
</template>

<script>
import { EventBus } from './event-bus.js';

export default {
  data() {
    return {
      dialogVisible: false
    };
  },
  created() {
    EventBus.$on('closeDialog', () => {
      this.dialogVisible = false;
    });
  }
};
</script>
  1. 在孙组件中使用EventBus.$emit()触发事件
javascript 复制代码
// Grandchild.vue

<template>
  <div>
    <button @click="closeDialog">Close Dialog</button>
  </div>
</template>

<script>
import { EventBus } from './event-bus.js';

export default {
  methods: {
    closeDialog() {
      EventBus.$emit('closeDialog');
    }
  }
};
</script>

通过以上步骤,可以使用全局事件总线实现爷孙组件之间的通讯。当孙组件中的按钮被点击时,会触发closeDialog事件,爷爷组件会监听到该事件并关闭对话框。

兄弟组件之间也可以使用全局事件总线实现数据共享;

总结步骤:

相关推荐
ssshooter15 分钟前
复古话题:Vue2 的空格间距切换到 Vite 后消失了
前端·vue.js·面试
IamZJT_21 分钟前
拒绝做 AI 的“饲养员” ❌:前端程序员在 AI 时代的生存与进化指南 🚀
前端·ai编程
MM_MS26 分钟前
Halcon控制语句
java·大数据·前端·数据库·人工智能·算法·视觉检测
程序员Agions36 分钟前
程序员武学修炼手册(二):进阶篇——小有所成,从能跑就行到知其所以然
前端·程序员
Van_Moonlight40 分钟前
RN for OpenHarmony 实战 TodoList 项目:任务完成进度条
javascript·开源·harmonyos
小画家~40 分钟前
第四十六: channel 高级使用
java·前端·数据库
Van_Moonlight1 小时前
RN for OpenHarmony 实战 TodoList 项目:深色浅色主题切换
javascript·开源·harmonyos
小贵子的博客1 小时前
Ant Design Vue <a-table>
前端·javascript·vue.js·anti-design-vue
m0_502724951 小时前
vue动态设置背景图片后显示异常
前端·css
天天进步20151 小时前
【Nanobrowser源码分析4】交互篇: 从指令到动作:模拟点击、滚动与输入的底层实现
开发语言·javascript·ecmascript