当前位置:首页 > 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 密码框实现方案 在 Vue 中实现密码框功能,可以通过原生 HTML 结合 Vue 指令或使用第三方组件库完成。以下是几种常见方案: 原生 HTML + Vue 双向绑定 <templ…

vue分类实现

vue分类实现

Vue分类实现方法 在Vue中实现分类功能通常涉及数据分组、动态渲染和交互逻辑。以下是几种常见的实现方式: 基于计算属性的分类 通过计算属性对原始数据进行分组处理,适合静态或少量数据分类: com…

vue实现逻辑

vue实现逻辑

Vue 实现逻辑的核心概念 Vue.js 是一个渐进式 JavaScript 框架,其核心逻辑围绕数据驱动和组件化开发。通过响应式系统、虚拟 DOM 和组件生命周期等机制,Vue 实现了高效的前端开发…

vue实现浮标

vue实现浮标

Vue 实现浮动按钮(浮标) 使用 Vue 实现浮动按钮可以通过多种方式完成,以下是几种常见的方法: 使用 CSS 定位和 Vue 组件 创建 Vue 组件并配合 CSS 固定定位实现浮动按钮:…

vue 实现赋值

vue 实现赋值

Vue 实现赋值的方法 在 Vue 中,赋值操作通常涉及数据绑定和响应式更新。以下是几种常见的赋值方式: 直接赋值给 data 属性 在 Vue 实例的 data 对象中定义的属性可以直接通过 th…

vue 实现聊天

vue 实现聊天

使用 Vue 实现聊天功能 创建 Vue 项目并安装依赖 确保已安装 Vue CLI,通过以下命令创建新项目: vue create chat-app 进入项目目录后,安装必要的依赖(如 Socke…