当前位置:首页 > 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 中可以通过动态组件配合递归组件实现多级弹窗。定义一个基础弹窗组件,通过递归调用自身实现层级嵌套。 基础弹窗组件模板示例: &…

vue动态渲染实现原理

vue动态渲染实现原理

Vue动态渲染实现原理 Vue的动态渲染核心基于响应式系统和虚拟DOM技术,通过数据驱动视图更新。以下是关键实现原理的分解: 响应式系统 Vue使用Object.defineProperty(Vu…

vue实现自定义登录

vue实现自定义登录

实现自定义登录的基本步骤 在Vue中实现自定义登录功能通常需要结合前端和后端技术。以下是一个基本的实现流程: 创建登录表单组件 使用Vue的单文件组件创建一个登录表单,包含用户名和密码输入框以及提…

vue实现选中单元格

vue实现选中单元格

Vue 实现选中单元格的方法 基础实现思路 在 Vue 中实现选中单元格功能,通常可以通过动态绑定 class 或 style 来实现。以下是一个基于表格的简单实现示例: <templ…

vue 实现

vue 实现

Vue 实现的基本步骤 安装 Vue.js 可以通过 npm 或 CDN 引入。使用 npm 安装适合大型项目,CDN 适合快速原型开发。 npm install vue 在 HTML 文件中引入…

vue原型实现

vue原型实现

Vue 原型实现的关键点 Vue.js 的原型系统是其响应式机制的核心部分,通过原型链实现数据的动态绑定和依赖收集。以下是实现 Vue 原型的主要技术要点。 数据响应式原理 Vue 通过 Objec…