当前位置:首页 > VUE

vue中$on实现

2026-03-09 07:16:58VUE

Vue 中 $on 的实现原理

Vue 中的 $on 是事件监听的核心方法,用于订阅自定义事件。其实现依赖于 Vue 的事件系统,本质是一个发布-订阅模式。

核心代码逻辑

Vue 的 $on 方法定义在 src/core/instance/events.js 中:

Vue.prototype.$on = function (event: string | Array<string>, fn: Function): Component {
  const vm: Component = this
  if (Array.isArray(event)) {
    for (let i = 0, l = event.length; i < l; i++) {
      vm.$on(event[i], fn)
    }
  } else {
    (vm._events[event] || (vm._events[event] = [])).push(fn)
  }
  return vm
}

关键实现细节

事件存储结构 每个 Vue 实例内部维护一个 _events 对象,用于存储事件名和对应的回调函数数组。当调用 $on 时,会将回调函数添加到对应事件名的数组中。

多事件注册支持 $on 的第一个参数可以是字符串或数组。如果是数组,会遍历数组为每个事件名注册相同的回调函数。

返回实例 方法返回 Vue 实例本身,支持链式调用。

vue中$on实现

典型使用场景

// 单个事件监听
this.$on('custom-event', handler)

// 多个事件监听
this.$on(['event1', 'event2'], handler)

与相关方法的协作

$emit 触发事件时会从 _events 中查找对应事件名的回调数组并执行。 $off 移除事件监听时会操作 _events 中的对应回调数组。 $once 通过 $on 和立即执行的 $off 组合实现一次性监听。

标签: vueon
分享给朋友:

相关文章

vue实现效果

vue实现效果

以下是Vue实现常见效果的几种典型方法,分为不同场景说明: 数据绑定与响应式更新 使用v-model实现表单双向绑定: <template> <input v-model="…

vue实现tap

vue实现tap

Vue 实现 Tap 事件 在移动端开发中,Tap 事件比 Click 事件更常用,因为 Click 事件有 300ms 延迟。以下是几种在 Vue 中实现 Tap 事件的方法。 使用第三方库 安装…

vue轮播实现

vue轮播实现

Vue 轮播实现方法 使用第三方库(推荐) 安装 swiper 或 vue-awesome-swiper 库,快速实现功能丰富的轮播效果。 以 vue-awesome-swiper 为例: npm…

vue实现github

vue实现github

Vue 实现 GitHub 相关功能 创建 GitHub API 请求 在 Vue 项目中,可以使用 axios 或 fetch 与 GitHub API 进行交互。需要在 GitHub 上创建个人访…

vue实现Pop

vue实现Pop

Vue 实现 Popover 组件的方法 使用 Vue 内置指令 v-show/v-if 和事件监听 通过 Vue 的指令和事件绑定实现基础的 Popover 功能。定义一个布尔值控制 Popover…

vue实现导航

vue实现导航

使用 Vue Router 实现导航 Vue Router 是 Vue.js 官方提供的路由管理器,用于构建单页应用(SPA)的导航系统。以下是实现导航的基本步骤。 安装 Vue Router n…