当前位置:首页 > 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 方法会被调用。

$emit 的源码实现

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

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

简化版源码逻辑:

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 $emit实现原理

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

相关文章

vue实现图片搜索

vue实现图片搜索

Vue实现图片搜索功能 使用HTML5的File API获取图片 通过<input type="file">元素让用户选择图片文件,使用FileReader对象读取图片数据。 <…

vue实现按钮刷新

vue实现按钮刷新

Vue 实现按钮刷新功能 在 Vue 中实现按钮刷新功能可以通过多种方式实现,具体取决于刷新需求是局部刷新还是全局刷新。以下是几种常见的方法: 使用 window.location.reload(…

vue表格重置怎么实现

vue表格重置怎么实现

重置表格数据的方法 在Vue中重置表格数据通常需要操作绑定的数据源,以下是几种常见实现方式: 直接重置数据源 // 假设表格绑定的是tableData this.tableData = [..…

vue实现发表

vue实现发表

Vue 实现发表功能 在 Vue 中实现发表功能通常涉及表单处理、数据绑定和网络请求。以下是实现步骤和代码示例: 表单设计与数据绑定 创建一个表单用于输入发表内容,使用 v-model 进行数据双…

vue实现矩阵

vue实现矩阵

Vue 实现矩阵的方法 在 Vue 中实现矩阵操作可以通过多种方式完成,以下是一些常见的方法: 使用二维数组表示矩阵 矩阵可以用二维数组来表示,每个元素对应矩阵中的一个值。在 Vue 的 data…

vue实现分屏

vue实现分屏

Vue 实现分屏的方法 分屏功能通常用于展示多个独立内容区域,以下是几种常见的实现方式: 使用 CSS Grid 布局 通过 CSS Grid 可以轻松创建分屏布局,在 Vue 组件中直接应用样式:…