当前位置:首页 > 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 computed 实现

vue computed 实现

computed 的基本用法 在 Vue 中,computed 用于声明计算属性,这些属性基于响应式依赖进行缓存。只有当依赖发生变化时,计算属性才会重新计算。 new Vue({ data: {…

实现 vue 框架

实现 vue 框架

Vue 框架的基本实现 Vue 是一个渐进式 JavaScript 框架,用于构建用户界面。以下是实现 Vue 框架的基本步骤和核心概念。 核心概念 响应式数据绑定 Vue 的核心特性之一是响应式数…

vue 实现列表

vue 实现列表

Vue 实现列表的方法 在 Vue 中实现列表通常使用 v-for 指令,结合数组或对象数据渲染动态列表。以下是几种常见的实现方式: 基础列表渲染 使用 v-for 指令遍历数组,渲染列表项。ite…

vue实现接口

vue实现接口

在 Vue 中实现接口请求 Vue 本身不直接提供 HTTP 请求功能,通常需要借助第三方库如 axios 或 fetch 来实现接口请求。以下是几种常见方法: 使用 axios 发送请求 安装 a…

vue实现pwa

vue实现pwa

Vue 实现 PWA 的步骤 Vue 结合 PWA(Progressive Web App)可以创建离线可用的 Web 应用。以下是实现方法: 安装 Vue CLI 并创建项目 确保已安装 Vue…

vue指令实现

vue指令实现

Vue 指令的实现方式 Vue 指令是特殊的标记,用于在 DOM 元素上应用特定的行为。可以通过全局或局部方式注册自定义指令。 全局注册指令 在 Vue 应用中通过 Vue.directive 方法…