当前位置:首页 > VUE

eventbus vue实现

2026-02-09 22:37:47VUE

EventBus 在 Vue 中的实现

EventBus 是一种基于发布-订阅模式的通信机制,适合在 Vue 组件间实现跨层级通信。以下是具体实现方法:

创建 EventBus 实例

在项目中新建一个文件(如 event-bus.js),通过 Vue 实例创建 EventBus:

import Vue from 'vue';
export const EventBus = new Vue();

发送事件(发布)

在需要发送事件的组件中,通过 $emit 触发自定义事件:

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

// 发送事件,可携带数据
EventBus.$emit('eventName', payload);
  • eventName:自定义事件名称
  • payload:可选参数,传递的数据

接收事件(订阅)

在需要接收事件的组件中,通过 $on 监听事件:

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

EventBus.$on('eventName', (payload) => {
  console.log('接收到数据:', payload);
});

移除事件监听

为避免内存泄漏,在组件销毁时(如 beforeDestroy 钩子)移除监听:

EventBus.$off('eventName');

若要移除所有监听,可不传参数:

EventBus.$off();

一次性监听

若只需监听一次事件,使用 $once

EventBus.$once('eventName', (payload) => {
  console.log('仅触发一次:', payload);
});

注意事项

  • 命名冲突:建议使用统一的命名规范(如模块名前缀)避免事件名重复。
  • 内存管理:务必在组件销毁时清理监听,防止重复订阅。
  • 替代方案:复杂场景建议使用 Vuex 状态管理。

完整示例

组件 A(发送事件)

<template>
  <button @click="sendMessage">发送消息</button>
</template>

<script>
import { EventBus } from './event-bus.js';
export default {
  methods: {
    sendMessage() {
      EventBus.$emit('message', { text: 'Hello from A' });
    }
  }
};
</script>

组件 B(接收事件)

eventbus vue实现

<script>
import { EventBus } from './event-bus.js';
export default {
  created() {
    EventBus.$on('message', (payload) => {
      console.log('B组件收到:', payload.text);
    });
  },
  beforeDestroy() {
    EventBus.$off('message');
  }
};
</script>

标签: eventbusvue
分享给朋友:

相关文章

vue实现简单的弹窗

vue实现简单的弹窗

使用 Vue 实现简单弹窗 组件基础结构 创建一个名为 Modal.vue 的组件文件,包含模板、脚本和样式部分: <template> <div class="mod…

vue异步组建实现原理

vue异步组建实现原理

Vue 异步组件实现原理 Vue 的异步组件允许将组件按需加载,通常用于代码分割或延迟加载非关键组件。其核心原理基于 Promise 和动态导入。 基本实现方式 通过 defineAsyncComp…

vue 全景实现

vue 全景实现

Vue 全景实现方案 在Vue中实现全景效果,通常需要结合WebGL或第三方库来处理3D场景渲染。以下是几种常见方法: 使用Three.js库 Three.js是一个强大的WebGL库,适合创建3D…

vue实现增删

vue实现增删

Vue 实现增删功能 在 Vue 中实现增删功能通常涉及数据绑定、事件处理和列表渲染。以下是基于 Vue 2 或 Vue 3 的实现方法: 数据定义 初始化一个数组用于存储列表数据,并在 Vue 实…

vue实现模糊

vue实现模糊

Vue实现模糊搜索的方法 在Vue中实现模糊搜索功能通常需要结合输入框和列表渲染,通过监听输入内容动态过滤数据。以下是几种常见实现方式: 使用计算属性实现 计算属性适合处理需要响应式更新的搜索逻辑:…

自己实现vue

自己实现vue

实现简易版 Vue.js 核心功能 要实现一个简易版 Vue.js,需要理解其核心功能:数据响应式、模板编译、依赖收集和虚拟 DOM。以下分模块实现关键功能。 数据响应式(Reactivity) 通…