当前位置:首页 > VUE

Vue事件传递实现原理

2026-02-23 07:42:02VUE

Vue事件传递的实现原理

Vue的事件传递机制主要依赖于$emit$on方法,通过自定义事件实现父子组件或跨层级组件间的通信。核心原理基于发布-订阅模式(Pub/Sub),通过事件中心管理事件的注册与触发。

事件注册与触发

  • $on方法:用于监听自定义事件。调用时会将事件名和对应的回调函数存储到当前组件实例的_events对象中。
    this.$on('event-name', callback)
  • $emit方法:触发指定事件名的事件,并执行对应的回调函数。会遍历_events中对应事件名的回调列表,依次执行。
    this.$emit('event-name', payload)

父子组件通信

  1. 父组件监听子组件事件
    父组件通过v-on(或@)在模板中直接监听子组件触发的自定义事件:

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

    子组件内部通过this.$emit('custom-event')触发事件。

  2. 跨层级组件通信
    若组件层级较深,可通过$attrs$listeners传递事件(Vue 2.x),或直接使用provide/inject结合事件总线(Event Bus)实现跨级通信。

事件总线(Event Bus)

通过创建一个空的Vue实例作为中央事件总线,实现任意组件间的通信:

const bus = new Vue()
// 组件A监听事件
bus.$on('event', callback)
// 组件B触发事件
bus.$emit('event', data)

Vue 3的变化

Vue 3中移除了$on$off等方法,推荐使用mitt等第三方库替代事件总线模式,或直接依赖provide/injectsetup中的emit函数。

注意事项

  • 事件名建议使用kebab-case(如my-event),避免与原生DOM事件冲突。
  • 及时销毁事件监听(Vue 2.x中通过$off或在beforeDestroy钩子中移除),防止内存泄漏。

Vue事件传递实现原理

标签: 原理事件
分享给朋友:

相关文章

vue插件实现原理

vue插件实现原理

Vue 插件实现原理 Vue 插件的核心是通过扩展 Vue 的功能,提供全局或实例级别的能力。插件可以添加全局方法、指令、混入(mixin)、组件等。 插件的基本结构 一个 Vue 插件通常是一个对…

vue动态组建实现原理

vue动态组建实现原理

Vue动态组件的实现原理 Vue的动态组件主要通过<component>标签和is属性实现,其核心原理涉及以下机制: 动态组件基础语法 <component :is="curren…

vue原理实现

vue原理实现

Vue 的核心原理实现 Vue 的核心原理主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是这些核心原理的具体实现方式: 响应式系统 Vue 的响应式系统基于 Object.defin…

eventbus实现原理vue

eventbus实现原理vue

EventBus 实现原理 EventBus 在 Vue 中通常用于跨组件通信,其核心原理基于发布-订阅模式。通过一个中央事件总线,组件可以订阅事件或触发事件,实现非父子组件间的通信。 核心机制…

react如何绑定事件

react如何绑定事件

React 事件绑定方法 在 React 中绑定事件有多种方式,以下是常见的几种方法: 使用 onClick 或其他事件属性直接绑定 <button onClick={() => co…

vue分页实现原理

vue分页实现原理

Vue 分页实现原理 Vue 分页的核心原理是通过计算当前页的数据范围,动态渲染数据列表并控制分页组件的交互。以下是关键实现步骤: 数据分片计算 分页需要根据当前页码和每页条数截取数据。假设原始…