当前位置:首页 > VUE

简单实现vue事件机制

2026-01-20 19:59:53VUE

Vue 事件机制实现

Vue 的事件机制主要依赖于 $on$emit$off 方法,用于组件间的通信。以下是简化版的事件总线实现:

1. 创建事件总线

class EventBus {
  constructor() {
    this.events = {};
  }

  $on(eventName, callback) {
    if (!this.events[eventName]) {
      this.events[eventName] = [];
    }
    this.events[eventName].push(callback);
  }

  $emit(eventName, ...args) {
    const callbacks = this.events[eventName];
    if (callbacks) {
      callbacks.forEach(cb => cb(...args));
    }
  }

  $off(eventName, callback) {
    if (!eventName) {
      this.events = {};
      return;
    }
    if (!callback) {
      delete this.events[eventName];
      return;
    }
    const callbacks = this.events[eventName];
    if (callbacks) {
      this.events[eventName] = callbacks.filter(cb => cb !== callback);
    }
  }
}

const bus = new EventBus();

2. 使用示例

// 监听事件
bus.$on('message', (text) => {
  console.log('Received:', text);
});

// 触发事件
bus.$emit('message', 'Hello World');

// 移除事件
const handler = (text) => console.log('Handler:', text);
bus.$on('message', handler);
bus.$off('message', handler);

3. 组件间通信

// 组件A
bus.$emit('update-data', { id: 1 });

// 组件B
bus.$on('update-data', (payload) => {
  console.log('Data updated:', payload);
});

4. 注意事项

简单实现vue事件机制

  • 事件名建议使用常量避免拼写错误
  • 及时移除无用的事件监听防止内存泄漏
  • 复杂场景建议使用 Vuex 替代事件总线

这个简化实现包含了 Vue 事件系统的核心功能,可以直接在项目中使用或作为学习参考。实际 Vue 源码中的实现会更复杂,包含更多边界情况处理。

标签: 机制事件
分享给朋友:

相关文章

vue的实现机制

vue的实现机制

Vue 的实现机制 Vue 是一个渐进式 JavaScript 框架,其核心实现机制包括响应式系统、虚拟 DOM、模板编译和组件化设计。以下是 Vue 实现机制的关键部分: 响应式系统 Vue 使用…

uniapp事件介绍

uniapp事件介绍

uniapp事件介绍 uniapp中的事件系统基于Vue.js的事件机制,允许开发者在组件间进行通信或响应用户交互。以下是uniapp中常见的事件类型和使用方法。 事件绑定与触发 在uniapp中,…

vue实现事件绑定

vue实现事件绑定

Vue 事件绑定实现方法 Vue 提供了多种方式实现事件绑定,以下是常用方法: v-on 指令 使用 v-on 指令绑定事件监听器,语法为 v-on:event="handler" 或简写为 @ev…

vue 事件实现原理

vue 事件实现原理

Vue 事件实现原理 Vue 的事件系统基于发布-订阅模式,通过 $on、$emit 等方法实现组件间通信。核心原理分为以下几个部分: 事件注册与监听 Vue 实例内部维护一个 _events 对象…

vue实现页面单击事件

vue实现页面单击事件

Vue 实现页面单击事件的方法 在 Vue 中实现单击事件可以通过 v-on 指令或 @ 简写来完成。以下是几种常见的实现方式: 使用 v-on 指令绑定单击事件 通过 v-on:click 可以直…

vue中实现长按事件

vue中实现长按事件

监听原生事件实现长按 在Vue中可以通过@mousedown和@touchstart绑定原生事件,配合setTimeout触发长按逻辑。清除定时器使用@mouseup、@mouseleave和@tou…