当前位置:首页 > 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(或@)在模板中直接监听子组件触发的自定义事件:

    Vue事件传递实现原理

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

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

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

    Vue事件传递实现原理

事件总线(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 rooter 实现原理

vue rooter 实现原理

Vue Router 实现原理 Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。其核心实现原理包括路由匹配、组件渲染和导航守卫等机制。 路由匹配与动态路由 V…

vue实现事件监听

vue实现事件监听

Vue 事件监听实现方法 Vue 提供了多种方式实现事件监听,涵盖组件内外交互、原生 DOM 事件处理等场景。以下是核心实现方案: 模板内直接监听 通过 v-on 或 @ 语法监听 DOM 事件:…

vue事件实现原理

vue事件实现原理

Vue 事件实现原理 Vue 的事件系统基于发布-订阅模式,通过 $on、$emit 等方法实现组件间通信。以下是核心实现原理的分解: 事件注册与存储 Vue 实例内部通过 _events 对象存储…

vue组件实现原理

vue组件实现原理

Vue 组件实现原理 Vue 组件的核心实现基于以下机制: 组件注册与模板解析 Vue 组件通过 Vue.component() 或单文件组件(.vue 文件)注册。模板会被编译成渲染函数,最终生成…

理解vue实现原理

理解vue实现原理

Vue 实现原理的核心机制 Vue.js 的核心实现基于响应式系统、虚拟 DOM 和组件化设计。通过数据劫持结合发布-订阅模式实现数据驱动视图的更新。 响应式系统 Vue 使用 Object.def…

vue实现事件代理

vue实现事件代理

事件代理的概念 事件代理(Event Delegation)是一种利用事件冒泡机制,将子元素的事件委托给父元素统一处理的技术。在Vue中,可以通过v-on指令或$on方法实现事件代理,减少事件监听器的…