当前位置:首页 > 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 实现全屏功能 在 Vue 中实现全屏功能可以通过浏览器提供的 Fullscreen API 完成。以下是一个完整的实现方案: 安装依赖(可选) 如果需要跨浏览器兼容性更好,可以安装 scr…

vue 实现树状

vue 实现树状

Vue 实现树状结构的方法 递归组件实现树状结构 递归组件是 Vue 中实现树状结构的常见方法。通过组件自身调用自身,可以轻松构建多层级树状结构。 <template> <u…

vue实现选人

vue实现选人

实现选人功能的基本思路 在Vue中实现选人功能通常涉及以下核心环节:数据绑定、用户交互处理、状态管理以及界面渲染。以下是具体实现方法: 数据准备与组件结构 创建包含人员信息的数组,通常从API获取…

vue实现画廊

vue实现画廊

Vue实现画廊的基本方法 使用Vue.js实现画廊功能可以通过多种方式完成,以下是一种常见的实现方案: 安装必要依赖 npm install vue-gallery --save 引入组件并注…

vue实现例子

vue实现例子

以下是一些常见的 Vue 实现例子,涵盖基础功能到进阶应用场景: 基础数据绑定 使用 v-model 实现双向数据绑定: <template> <div> &l…

vue实现门户

vue实现门户

Vue 实现门户网站的关键步骤 搭建基础框架 使用 Vue CLI 或 Vite 初始化项目,安装 Vue Router 管理多页面路由。门户通常需要响应式布局,可引入 UI 库如 Element P…