当前位置:首页 > VUE

vue事件实现原理

2026-01-16 21:40:02VUE

Vue 事件实现原理

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

事件注册与存储

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

vue事件实现原理

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

事件触发

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

vue事件实现原理

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实现放大镜原理

vue实现放大镜原理

Vue 实现放大镜原理 实现放大镜效果的核心原理是通过鼠标移动事件获取位置信息,动态计算放大区域并显示放大后的图像。以下是基于 Vue 的实现方法: 基本结构设计 HTML 部分需包含原图容器、放大…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:CSS…

vue cli实现原理

vue cli实现原理

Vue CLI 的实现原理 Vue CLI 是一个基于 Node.js 的工具链,用于快速搭建 Vue.js 项目。其核心实现原理涉及模块化设计、插件系统、Webpack 封装等多个方面。 核心模块…

jquery绑定事件

jquery绑定事件

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

vue分页实现原理

vue分页实现原理

Vue 分页实现原理 Vue 分页的核心原理是通过计算当前页的数据范围,动态渲染数据列表并控制分页组件的交互。以下是关键实现步骤: 数据分片计算 分页需要根据当前页码和每页条数截取数据。假设原始数据…

vue 路由实现原理

vue 路由实现原理

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