当前位置:首页 > VUE

vue click 实现原理

2026-01-19 14:48:56VUE

Vue 中 @click 的实现原理

Vue 的 @click 指令本质上是基于原生 DOM 事件机制的封装,通过 Vue 的模板编译和事件系统实现。以下是其核心实现原理:

模板编译阶段

Vue 模板中的 @click 会被编译为渲染函数中的 on 属性。例如:

vue click 实现原理

<button @click="handleClick">Click</button>

编译后的渲染函数类似:

vue click 实现原理

createElement('button', {
  on: {
    click: handleClick
  }
})

事件绑定阶段

Vue 在虚拟 DOM 渲染为真实 DOM 时,会通过原生 addEventListener 绑定事件。事件处理函数被包裹在 Vue 的内部函数中,确保触发时能正确执行组件实例的对应方法。

事件修饰符处理

Vue 提供了 .stop.prevent 等修饰符,这些修饰符会在编译阶段被解析为对应的原生事件操作:

  • .stop 调用 event.stopPropagation()
  • .prevent 调用 event.preventDefault()
  • .native 绑定到组件根元素的原生事件

自定义事件与原生事件的区别

  • 组件上的 @click 默认是自定义事件,需通过 $emit 触发。
  • 添加 .native 修饰符后,会绑定到组件的根元素的原生 click 事件。

示例代码解析

// 编译后的渲染函数
function render() {
  with(this) {
    return _c('button', {
      on: {
        click: function($event) {
          handleClick($event)
        }
      }
    }, [_v("Click")])
  }
}
  • _c 是 Vue 的 createElement 函数。
  • $event 是 Vue 封装后的事件对象,与原生的 event 对象一致。

标签: 原理vue
分享给朋友:

相关文章

vue实现菜单调用

vue实现菜单调用

Vue 实现动态菜单的常见方法 基于路由配置生成菜单 Vue Router 的路由配置可以天然转化为菜单结构,适合权限与路由绑定的系统: // router/index.js const route…

vue播放倍速怎么实现

vue播放倍速怎么实现

实现Vue播放倍速的方法 在Vue中实现播放倍速功能通常涉及HTML5的<video>元素或第三方播放器库。以下是几种常见实现方式: 使用原生HTML5 video元素 通过ref获取v…

vue实现多用户登录

vue实现多用户登录

实现多用户登录的基本思路 在Vue中实现多用户登录通常需要结合后端API完成身份验证,并通过前端路由、状态管理(如Vuex或Pinia)和本地存储(如localStorage)来管理用户会话。以下是关…

vue实现上移下移插件

vue实现上移下移插件

实现上移下移功能的 Vue 插件 在 Vue 中实现列表项的上移和下移功能,可以通过自定义指令或组件封装的方式完成。以下是两种常见实现方式: 基于数组操作的通用方法 通过操作数组索引实现元素位置交换…

vue实现文字

vue实现文字

Vue 中实现文字显示的方法 在 Vue 中实现文字显示可以通过多种方式,包括插值表达式、指令、组件等。以下是几种常见的实现方法: 插值表达式 使用双大括号 {{ }} 进行文本插值,这是 Vue…

vue 实现全屏

vue 实现全屏

Vue 实现全屏功能 在 Vue 中实现全屏功能可以通过浏览器提供的 Fullscreen API 完成。以下是一个完整的实现方案: 安装依赖(可选) 如果需要跨浏览器兼容性更好,可以安装 scre…