当前位置:首页 > VUE

vue事件实现原理

2026-02-17 14:12:13VUE

Vue 事件实现原理

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

事件注册与存储

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

// 伪代码示例
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.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 操作。例如:

vue事件实现原理

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

总结

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

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

相关文章

css动画制作原理

css动画制作原理

CSS动画制作原理 CSS动画通过关键帧(@keyframes)和动画属性(如animation-name、animation-duration)实现动态效果。核心原理分为两部分:定义动画关键帧和绑定…

vue extend实现原理

vue extend实现原理

Vue.extend 的实现原理 Vue.extend 是 Vue.js 中用于创建子类构造函数的全局方法,其核心原理基于 JavaScript 的原型继承机制。以下是其关键实现逻辑: 原型继承与构…

uniapp事件介绍

uniapp事件介绍

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

vue实现原理比较

vue实现原理比较

Vue 2 实现原理 Vue 2 的核心实现基于响应式系统和虚拟 DOM。响应式系统通过 Object.defineProperty 对数据进行劫持,当数据变化时触发依赖更新。虚拟 DOM 则通过 d…

vue checkbox实现原理

vue checkbox实现原理

Vue Checkbox 实现原理 Vue 中的 Checkbox 实现主要依赖于 v-model 指令,通过双向数据绑定将 checkbox 的选中状态与 Vue 实例的数据属性关联起来。 基本实…

vue实现change事件

vue实现change事件

Vue 实现 change 事件的方法 在 Vue 中,可以通过多种方式监听和处理 change 事件,以下是常见的实现方法: 使用 v-on 或 @ 语法监听 change 事件 <tem…