当前位置:首页 > VUE

vue事件实现原理

2026-02-17 14:12:13VUE

Vue 事件实现原理

Vue 的事件系统基于发布-订阅模式,通过 $on$emit$off 等方法实现组件间通信。其核心原理可以分为以下几个部分:

事件注册与存储

Vue 实例内部通过 _events 对象存储事件监听器。当调用 $on 方法时,会将事件名作为键,监听器函数作为值存入 _events 对象。如果是多个监听器,则以数组形式存储。

vue事件实现原理

// 伪代码示例
Vue.prototype.$on = function (event, fn) {
  const vm = this
  ;(vm._events[event] || (vm._events[event] = [])).push(fn)
  return vm
}

事件触发

调用 $emit 方法时,会根据事件名从 _events 中取出对应的监听器函数列表,依次执行。支持传递参数,这些参数会传递给监听器函数。

Vue.prototype.$emit = function (event, ...args) {
  const vm = this
  let cbs = vm._events[event]
  if (cbs) {
    cbs.forEach(fn => fn.apply(vm, args))
  }
  return vm
}

事件移除

$off 方法用于移除事件监听器。可以移除指定事件的某个监听器、所有监听器,或移除所有事件的所有监听器。

vue事件实现原理

Vue.prototype.$off = function (event, fn) {
  const vm = this
  if (!arguments.length) {
    vm._events = Object.create(null)
    return vm
  }
  if (!fn) {
    vm._events[event] = null
    return vm
  }
  const cbs = vm._events[event]
  if (cbs) {
    vm._events[event] = cbs.filter(cb => cb !== fn)
  }
  return vm
}

自定义事件与原生事件

Vue 还区分自定义事件和原生 DOM 事件:

  • 自定义事件通过 $emit$on 实现组件间通信。
  • 原生 DOM 事件通过 v-on 指令绑定,底层调用 addEventListener

事件修饰符

Vue 提供的事件修饰符(如 .stop.prevent)在编译阶段会被解析为对应的原生 DOM 操作。例如:

  • .stop 会调用 event.stopPropagation()
  • .prevent 会调用 event.preventDefault()

总结

Vue 的事件系统通过 _events 对象管理监听器,利用发布-订阅模式实现高效的事件通信。其设计兼顾了灵活性和性能,同时通过修饰符简化了原生事件的处理。

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

相关文章

vue实现多级联动原理

vue实现多级联动原理

Vue 多级联动实现原理 Vue 中实现多级联动的核心是通过响应式数据绑定和事件监听,动态更新下一级选项的数据。以下是常见实现方式: 数据驱动与 v-model 绑定 通过 v-model 绑定各级…

uniapp事件介绍

uniapp事件介绍

uniapp事件介绍 uniapp中的事件系统基于Vue.js的事件机制,允许开发者在组件间进行通信或响应用户交互。以下是uniapp中常见的事件类型和使用方法。 事件绑定与触发 在uniapp中,…

vue实现事件监听

vue实现事件监听

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

php购物车的实现原理

php购物车的实现原理

购物车基本概念 购物车是电子商务网站的核心功能之一,允许用户临时存储选中的商品,支持增删改查操作,最终生成订单。PHP实现通常结合Session或数据库存储数据。 Session存储实现 使用PHP…

vue实现tap事件

vue实现tap事件

Vue 中实现 Tap 事件的方法 在 Vue 中实现类似移动端的 tap 事件(轻触),可以通过原生事件或第三方库实现。以下是几种常见方法: 使用 @click 模拟 Tap 事件 移动端浏览器通…

vue原理与实现

vue原理与实现

Vue 的核心原理 Vue 是一个渐进式 JavaScript 框架,其核心原理包括响应式系统、虚拟 DOM、模板编译和组件化设计。这些机制共同构成了 Vue 的高效开发模式。 响应式系统通过 Ob…