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

本文以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事件,爷爷组件会监听到该事件并关闭对话框。

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

总结步骤:

相关推荐
竹林8182 分钟前
用 wagmi v2 + viem 监听链上事件,我踩了三天坑终于搞懂了实时日志与历史补全
javascript
Momo__5 分钟前
VueUse createReusableTemplate —— 单文件组件内的模板复用神器
前端·vue.js
只一9 分钟前
😭从回调地狱到 async/await:一文打通 Ajax 与 JS 异步编程
javascript
程序员小富12 分钟前
我开源了一个开发者专属的智能 JSON 工具,得到了媳妇高度认可
前端·vue.js·后端
小小小小宇12 分钟前
程序员如何给 LLM 装工具以及看懂推理过程
前端
写代码的皮筏艇12 分钟前
React中的forwardRef
前端·react.js·面试
槑有老呆21 分钟前
花三个月工资请了个 AI 程序员,结果它连青岛啤酒股价都查不了
前端
风骏时光牛马23 分钟前
Verilog开发常见问题汇总解析
前端
子兮曰25 分钟前
AI Coding Method Map:一张图看懂 AI 编程的完整链路
前端·人工智能·后端