当前位置:首页 > VUE

Vue事件传递实现原理

2026-01-22 16:50:44VUE

Vue 事件传递的实现原理

Vue 的事件传递主要通过 $emit$on 方法实现,基于发布-订阅模式。子组件通过 $emit 触发事件,父组件通过 v-on@ 监听事件,从而实现父子组件间的通信。

核心机制

  1. $emit 触发事件
    子组件调用 this.$emit(eventName, ...args) 触发自定义事件。eventName 是事件名称,args 是传递给父组件的参数。

  2. $on 监听事件
    父组件通过 v-on:eventName="handler"@eventName="handler" 监听子组件触发的事件。handler 是父组件中定义的回调函数。

  3. 事件中心(Event Bus)
    跨组件通信时,可以创建一个空的 Vue 实例作为事件中心:

    Vue事件传递实现原理

    const eventBus = new Vue();
    // 组件A发送事件
    eventBus.$emit('event-name', data);
    // 组件B监听事件
    eventBus.$on('event-name', (data) => {});

源码解析

Vue 的事件系统在 src/core/instance/events.js 中实现,核心逻辑如下:

  1. 事件注册
    $on 方法将回调函数存入 _events 对象,键为事件名,值为回调函数数组:

    Vue.prototype.$on = function (event, fn) {
      const vm = this;
      (vm._events[event] || (vm._events[event] = [])).push(fn);
      return vm;
    };
  2. 事件触发
    $emit 方法遍历 _events 中对应事件名的回调函数并执行:

    Vue事件传递实现原理

    Vue.prototype.$emit = function (event) {
      const vm = this;
      let cbs = vm._events[event];
      if (cbs) {
        const args = [...arguments].slice(1);
        for (let i = 0; i < cbs.length; i++) {
          cbs[i].apply(vm, args);
        }
      }
      return vm;
    };

注意事项

  • 事件命名规范
    推荐使用 kebab-case(如 my-event),因为 HTML 属性大小写不敏感。

  • 移除事件监听
    通过 $off 移除事件监听,避免内存泄漏:

    // 移除特定事件的所有监听
    this.$off('event-name');
    // 移除特定回调
    this.$off('event-name', callback);
  • 一次性监听
    使用 $once 监听一次后自动移除:

    this.$once('event-name', callback);

总结

Vue 的事件传递基于发布-订阅模式,通过 $emit$on 实现组件通信。源码中通过 _events 对象管理事件回调,适用于父子组件或任意组件间的消息传递。合理使用事件中心(Event Bus)可简化跨层级通信。

标签: 原理事件
分享给朋友:

相关文章

php购物车实现原理

php购物车实现原理

PHP 购物车实现原理 购物车是电子商务网站的核心功能之一,PHP 实现购物车功能主要依赖会话(Session)或数据库存储用户选择的商品信息。以下是常见的实现方式和技术要点: 基于 Session…

vue 路由实现原理

vue 路由实现原理

Vue 路由实现原理 Vue Router 是 Vue.js 官方的路由管理器,其核心原理基于前端路由的实现方式。以下是 Vue Router 的主要实现机制: 路由模式 Vue Router 支持…

vue实现原理书籍

vue实现原理书籍

以下是关于Vue实现原理的推荐书籍和学习资源,涵盖核心机制、源码解析及实践应用: 深入理解Vue核心机制 《Vue.js设计与实现》 作者霍春阳,系统剖析Vue 3的响应式系统、虚拟DOM、编译器等…

vue template实现原理

vue template实现原理

Vue Template 的实现原理 Vue 的模板(Template)是通过编译转换成渲染函数(Render Function)的,最终生成虚拟 DOM(Virtual DOM)并渲染到真实 DOM…

vue实现登录原理

vue实现登录原理

Vue 实现登录原理 Vue 实现登录功能主要涉及前端与后端的交互、状态管理、路由守卫等核心环节。以下是关键实现步骤: 登录表单与数据绑定 使用 Vue 的 v-model 双向绑定表单数据(如用户…

vue指令实现原理

vue指令实现原理

Vue 指令的实现原理 Vue 指令的核心是通过自定义属性(如 v-model、v-if)扩展 HTML 功能,其实现依赖于编译、响应式系统和 DOM 操作。以下是关键实现机制: 编译阶段解析指令…