当前位置:首页 > VUE

vue中$on实现

2026-03-29 18:54:38VUE

在Vue中,$on 是事件监听的核心方法,用于自定义事件的订阅。以下是其实现原理和应用方式:

vue中$on实现

实现原理

Vue的事件系统基于发布-订阅模式,$on 方法将事件名和回调函数存储到实例内部的 _events 对象中(初始化时为空对象)。当事件触发时,通过 $emit 遍历执行对应事件名的回调队列。

vue中$on实现

Vue.prototype.$on = function (event, fn) {
  const vm = this;
  // 若事件名为数组,递归注册多个事件
  if (Array.isArray(event)) {
    for (let i = 0; i < event.length; i++) {
      vm.$on(event[i], fn);
    }
  } else {
    // 将回调函数推入_events对应事件的数组
    (vm._events[event] || (vm._events[event] = [])).push(fn);
  }
  return vm;
};

基础用法

监听自定义事件,通常在父子组件通信或全局事件总线中使用:

// 子组件触发事件
this.$emit('custom-event', data);

// 父组件监听事件
this.$on('custom-event', (data) => {
  console.log('接收数据:', data);
});

事件总线模式

通过创建空的Vue实例作为中央事件总线:

// eventBus.js
import Vue from 'vue';
export const bus = new Vue();

// 组件A监听事件
bus.$on('event-name', handler);

// 组件B触发事件
bus.$emit('event-name', payload);

注意事项

  • 内存管理:手动监听的事件需在组件销毁时通过 $off 移除,避免内存泄漏。
  • 单次监听:使用 $once 可实现只触发一次的事件监听。
  • 响应式隔离:事件总线模式中的回调函数不会自动绑定组件上下文,需用箭头函数或 .bind(this)

与Vue3差异

Vue 3移除了 $on API,推荐使用 mitttiny-emitter 等第三方库实现事件总线功能。

标签: vueon
分享给朋友:

相关文章

vue SSG实现

vue SSG实现

Vue SSG 实现方法 Vue 的静态站点生成(SSG)可以通过多种工具和框架实现,以下是几种常见的方法: 使用 VuePress VuePress 是一个基于 Vue 的静态站点生成器,适合文档…

vue 实现fadeout

vue 实现fadeout

Vue 实现淡出效果 在 Vue 中实现淡出(fade-out)效果可以通过 CSS 过渡或动画结合 Vue 的动态渲染功能完成。以下是几种常见方法: 使用 Vue 过渡(Transition)组件…

vue实现curd

vue实现curd

Vue实现CRUD操作 初始化Vue项目 使用Vue CLI创建新项目,安装必要依赖如axios用于HTTP请求 vue create crud-demo cd crud-demo npm inst…

vue 实现平面

vue 实现平面

Vue 实现平面的方法 在 Vue 中实现平面效果通常涉及 CSS 样式、UI 框架或自定义组件的使用。以下是几种常见方法: 使用 CSS 样式 通过 Vue 的样式绑定或 scoped CSS 为…

vue实现书库

vue实现书库

Vue 实现书库功能 使用 Vue 构建书库功能需要结合前端框架和后端数据管理。以下是实现步骤和关键点: 项目初始化 使用 Vue CLI 或 Vite 初始化项目,安装 Vue Router 和状…

vue实现项目

vue实现项目

Vue 项目实现指南 环境准备 确保已安装 Node.js(建议版本 14+)和 npm/yarn。通过以下命令检查版本: node -v npm -v 创建 Vue 项目 使用 Vue CLI 快…