当前位置:首页 > 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函数。

Vue事件传递实现原理

注意事项

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

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

相关文章

vue 实现原理

vue 实现原理

Vue 实现原理 Vue.js 是一个渐进式 JavaScript 框架,其核心实现原理主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是 Vue 实现原理的核心要点: 响应式系统 Vu…

jquery点击事件

jquery点击事件

jQuery 点击事件基础用法 使用 jQuery 绑定点击事件主要通过 .click() 方法或 .on() 方法实现。以下示例展示如何为按钮添加点击事件: // 方法1: 使用 .click()…

vue动画实现原理

vue动画实现原理

Vue动画实现原理 Vue的动画系统基于CSS过渡和动画,结合Vue的响应式系统,提供声明式的方式管理元素进入/离开的动画效果。核心原理分为以下几个部分: 过渡类名自动应用 Vue在元素插入…

vue 路由实现原理

vue 路由实现原理

Vue 路由实现原理 Vue Router 是 Vue.js 官方的路由管理器,其核心原理基于前端路由的实现方式。以下是 Vue Router 的主要实现机制: 路由模式 Vue Router 支持…

vue核心实现原理

vue核心实现原理

Vue 核心实现原理 Vue.js 的核心实现原理主要围绕响应式系统、虚拟 DOM 和模板编译展开。以下是关键实现机制: 响应式系统 Vue 通过 Object.defineProperty(Vue…

vue顶层实现原理

vue顶层实现原理

Vue 顶层实现原理 Vue 的核心实现原理主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是关键原理的分解: 响应式系统 Vue 通过 Object.defineProperty(Vu…