当前位置:首页 > VUE

vue $emit实现原理

2026-01-19 00:12:24VUE

Vue $emit 实现原理

Vue 的 $emit 方法是实现组件间通信的核心机制之一,主要用于子组件向父组件传递事件和数据。其实现原理主要基于 Vue 的事件系统和发布-订阅模式。

事件注册与监听

在 Vue 中,父组件通过 v-on@ 语法监听子组件触发的事件。例如:

<child-component @custom-event="handleEvent"></child-component>

子组件内部通过 $emit 触发事件时,父组件的 handleEvent 方法会被调用。

vue $emit实现原理

$emit 的源码实现

Vue 的 $emit 方法定义在 Vue.prototype 上,核心逻辑如下:

  1. 事件触发$emit 方法接收事件名称和可选参数,遍历当前实例的 _events 属性(存储事件监听器的对象),找到匹配的事件回调函数。
  2. 执行回调:遍历回调函数列表,依次执行并传入参数。回调函数通过 applycall 绑定当前 Vue 实例的上下文。

简化版源码逻辑:

vue $emit实现原理

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

发布-订阅模式

$emit 的实现本质是发布-订阅模式:

  • 订阅:父组件通过 v-on 订阅子组件的事件。
  • 发布:子组件通过 $emit 发布事件,触发父组件的回调。

事件修饰符支持

Vue 对 $emit 的事件名支持自动转换:

  • 驼峰命名(customEvent)会被转换为短横线命名(custom-event),以兼容 HTML 大小写不敏感的特性。

与 $on 和 $off 的关系

  • $on:用于手动监听事件,将回调函数存入 _events 对象。
  • $off:移除事件监听器。
  • $emit$on 配合,构成完整的事件系统。

总结

$emit 的核心是通过事件名称从 _events 中查找并执行对应的回调函数,实现组件间的通信。其设计简洁高效,是 Vue 组件化的重要基础。

标签: 原理vue
分享给朋友:

相关文章

vue使用vr实现标注

vue使用vr实现标注

Vue 中使用 VR 实现标注的方法 在 Vue 项目中结合 VR 技术实现标注功能,可以通过 WebXR 和 Three.js 等库实现。以下为具体实现方法: 安装依赖 确保项目中已安装 Thre…

vue异步组建实现原理

vue异步组建实现原理

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

vue实现RTMP

vue实现RTMP

Vue 中实现 RTMP 流播放 RTMP(Real-Time Messaging Protocol)是一种用于实时音视频流传输的协议。在 Vue 中实现 RTMP 播放通常需要借助第三方库或播放器。…

vue实现计算

vue实现计算

Vue 实现计算的方法 在 Vue 中实现计算功能可以通过多种方式完成,主要包括计算属性(computed)、方法(methods)和侦听器(watch)。以下是具体的实现方法: 计算属性(Comp…

vue实现swiper

vue实现swiper

Vue 中实现 Swiper 的方法 安装 Swiper 依赖 在 Vue 项目中安装 Swiper 和相关依赖: npm install swiper vue-awesome-swiper 全局引…

vue简单实现

vue简单实现

Vue 简单实现示例 以下是一个使用 Vue.js 创建简单应用的示例,涵盖基本功能如数据绑定、事件处理和组件化。 基础 HTML 结构 <!DOCTYPE html> <html…