当前位置:首页 > VUE

vue事件实现原理

2026-01-16 21:40:02VUE

Vue 事件实现原理

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

事件注册与存储

Vue 实例内部通过 _events 对象存储事件监听器。调用 $on(event, callback) 时,会将回调函数按事件名存入 _events

// 简化版实现
Vue.prototype.$on = function (event, fn) {
  (this._events[event] || (this._events[event] = [])).push(fn);
};

事件触发

$emit(event, ...args) 会从 _events 中查找对应事件名的回调数组,并依次执行:

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

事件移除

$off(event, callback) 会从 _events 中移除指定事件的回调:

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

自定义事件与原生事件

  • 自定义事件:通过 $emit$on 实现父子组件通信,例如 v-on:my-event 会被编译为 $on('my-event')
  • 原生 DOM 事件:通过 v-on@ 绑定到模板时,Vue 会调用原生 addEventListener,并在组件销毁时自动解绑。

事件修饰符原理

例如 .stop.prevent 等修饰符会在编译阶段转换为对应的原生事件操作:

// .stop 修饰符的实现逻辑
if (event.stopPropagation) event.stopPropagation();

性能优化

Vue 通过事件缓存机制(如 $once)和自动解绑(组件销毁时调用 $off)避免内存泄漏。

vue事件实现原理

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

相关文章

css动画制作原理

css动画制作原理

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

jquery事件

jquery事件

jQuery 事件基础 jQuery 提供了一套简化的事件处理机制,允许开发者通过简洁的语法绑定、触发和管理事件。核心方法包括 on()、off()、trigger() 等,支持常见事件(如点击、悬停…

vue如何实现原理

vue如何实现原理

Vue 实现原理的核心机制 Vue.js 的核心实现原理基于响应式系统、虚拟 DOM 和组件化设计。以下是关键机制的详细解析: 响应式系统 Vue 通过 Object.defineProperty…

eventbus实现原理vue

eventbus实现原理vue

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

jquery绑定事件

jquery绑定事件

jQuery 绑定事件的方法 jQuery 提供了多种方式来绑定事件,以下是常见的几种方法: on() 方法 on() 是最推荐的事件绑定方法,支持动态元素和多个事件绑定。 $(selecto…

jquery触发事件

jquery触发事件

jQuery 触发事件的方法 jQuery 提供了多种方法来触发事件,包括直接触发、自定义事件以及模拟用户行为。以下是几种常见的方法: trigger() 方法 trigger() 方法用于触发指…