news 2026/2/7 6:12:37

【Vue】11 Vue技术——Vue 中的事件处理详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Vue】11 Vue技术——Vue 中的事件处理详解

文章目录

    • 前言
    • 一、事件绑定的基本语法
    • 二、事件回调函数的定义位置
    • 三、禁止在 methods 中使用箭头函数
    • 四、methods 中函数的 this 指向
    • 五、事件传参:如何传递额外参数
      • 1. 不传参(仅接收事件对象)
      • 2. 传参 + 保留事件对象
      • 3. 等效写法说明
    • 六、完整示例解析
    • 七、总结与最佳实践

前言

在 Vue.js 开发中,事件处理是实现用户交互的核心机制之一。通过v-on指令(或其简写形式@),我们可以轻松地监听 DOM 事件并执行相应的 JavaScript 逻辑。本文将深入讲解 Vue 中事件的基本使用方式、注意事项以及常见用法,并结合实际代码示例进行说明。


一、事件绑定的基本语法

Vue 提供了两种等效的方式绑定事件:

  • 完整写法v-on:click="methodName"
  • 简写形式@click="methodName"

这两种写法功能完全一致,开发者可根据个人或团队编码风格选择使用。

<buttonv-on:click="showInfo">点我提示信息(不传参)</button><!-- <button @click="showInfo">点我提示信息</button> --><!-- v-on:可以写成@ -->

注释说明:v-on:可以简写为@,这是 Vue 提供的语法糖,使模板更简洁。


二、事件回调函数的定义位置

根据 Vue 的最佳实践,事件的回调函数应配置在methods对象中,并且通常定义在 Vue 实例(vm)上。

constvm=newVue({el:'#root',data:{name:'上高山'},methods:{showInfo(event){alert('同学你好!');console.log(this);// 此处的 this 是 vm 对象}}});

这样做的好处是:

  • 逻辑集中管理;
  • 支持响应式更新;
  • this自动绑定到当前 Vue 实例。

三、禁止在 methods 中使用箭头函数

这是一个非常重要的注意事项!

注释原文强调:“methods中配置的函数,不要用箭头函数!否则this就不是vm了。”

箭头函数没有自己的this,它会继承外层作用域的this。在 Vue 的methods中使用箭头函数会导致this指向window(非严格模式)或undefined(严格模式),从而无法访问 Vue 实例的数据和方法。

// ❌ 错误示范:使用箭头函数showInfo2:(event)=>{console.log(this);// this 是 window,不是 vm!}

正确做法是使用普通函数:

// ✅ 正确写法showInfo(){console.log(this);// this 是 vm 实例}

四、methods 中函数的 this 指向

Vue 会自动将methods中定义的函数绑定到当前实例(vm或组件实例)上。因此,在这些函数内部,this始终指向 Vue 实例,可以直接访问dataprops、其他方法等。

methods:{showInfo(){console.log(this.name);// 可以访问 data 中的 name}}

五、事件传参:如何传递额外参数

有时我们需要在触发事件时传递自定义参数(如 ID、索引等)。Vue 允许我们在调用方法时显式传入参数,同时保留对原生事件对象$event的访问。

1. 不传参(仅接收事件对象)

<button@click="showInfo">点我</button>
showInfo(event){// event 是原生 DOM 事件对象}

2. 传参 + 保留事件对象

<button@click="showInfo3(66, $event)">点我提示信息3(传参)</button>
showInfo3(number,event){alert('同学你好!!'+number);console.log(event);// 原生事件对象}

关键点:当手动传参时,必须显式使用$event来获取事件对象,否则event参数将为undefined

3. 等效写法说明

注释中提到:“@click="demo"@click="demo($event)"效果一致,但后者可以传参。”

  • @click="demo":Vue 自动将原生事件对象作为第一个参数传入。
  • @click="demo($event)":显式传入事件对象,便于在需要额外参数时使用。

六、完整示例解析

结合你的 HTML 代码,我们来看三个按钮的行为差异:

  1. showInfo:标准方法,this正确指向vm,弹出提示。
  2. showInfo2:使用箭头函数,this指向window,无法访问vm的数据(虽然本例中未使用this,但存在隐患)。
  3. showInfo3:传入数字66$event,展示了如何同时传递自定义参数和事件对象。

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"/> <title>事件的基本使用</title> <!-- 引入Vue --> <script type="text/javascript"src="../js/vue.js"></script> </head> <body> <!-- 事件的基本使用: 1.使用v-on:xxx 或@xxx绑定事件,其中xxx是事件名; 2. 事件的回调函数要配置在methods对象中,最好在vm上; 3.methods中配置的函数,不要用箭头函数!否则this就不是vm了; 4.methods中配置的函数,都是被Vue所管理的函数,this的指向是vm 或 组件实例对象; 5.@click="demo"和 @click="demo($event)"效果一致,但后者可以传参; --> <!-- 准备好一个容器 --> <div id="root"> <h2>欢迎来到{{name}}学习</h2> <buttonv-on:click="showInfo">点我提示信息(不传参)</button> <!-- <button@click="showInfo">点我提示信息</button> --> <!--v-on:可以写成@ --> <buttonv-on:click="showInfo2">点我提示信息2(箭头函数)</button> <button @click="showInfo3(66, $event)">点我提示信息3(传参)</button> <!-- 给函数中传一个参数 --> </div> <script type="text/javascript"> Vue.config.productionTip = false // 阻止Vue在启动时产生生产提示 const vm = newVue({el:'#root', data:{name:'上高山'}, methods:{showInfo(event){// console.log(event.target.innerText)alert('同学你好!')console.log(this)// 此处的this是vm对象}, showInfo2:(event)=>{// 使用箭头函数以后,this是window对象 // console.log(event.target.innerText)//alert('同学你好')console.log(this)// 此处的this是vm}, showInfo3(number, event){alert('同学你好!!'+ number + event)console.log(number,event)}}})</script> </body> </html>

七、总结与最佳实践

要点说明
✅ 使用methods定义事件处理函数保持逻辑清晰,支持响应式
❌ 避免在methods中使用箭头函数否则this不再指向 Vue 实例
✅ 利用@简写v-on:提高代码可读性
✅ 需要传参时使用$event显式传递事件对象确保能同时获取参数和事件信息
✅ 理解this的自动绑定机制所有methods函数中的this都是当前 Vue 实例

通过合理使用 Vue 的事件系统,我们可以构建出高度交互且结构清晰的前端应用。牢记上述原则,将帮助你避免常见陷阱,写出更健壮的 Vue 代码。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/2 9:19:26

2026必备!本科生毕业论文必备TOP9 AI论文网站

2026必备&#xff01;本科生毕业论文必备TOP9 AI论文网站 2026年本科生论文写作必备工具测评 随着AI技术在学术领域的广泛应用&#xff0c;越来越多的本科生开始依赖AI辅助完成毕业论文。然而&#xff0c;面对市场上琳琅满目的AI论文网站&#xff0c;如何选择真正适合自己需求的…

作者头像 李华
网站建设 2026/2/3 18:18:44

STM32CubeMX配置LCD12864外设一文说清

从零开始&#xff1a;用STM32CubeMX驱动LCD12864&#xff0c;实战详解每一步你有没有遇到过这样的情况&#xff1f;项目需要一个能显示汉字的屏幕&#xff0c;但又不想上TFT——太贵、功耗高、代码复杂。这时候&#xff0c;LCD12864就成了性价比之选。它分辨率够用&#xff08;…

作者头像 李华
网站建设 2026/2/2 4:46:13

FunASR语音识别案例:法律文书语音转文字应用

FunASR语音识别案例&#xff1a;法律文书语音转文字应用 1. 引言 在司法实践和法律服务领域&#xff0c;律师、法官及法务人员经常需要处理大量口头陈述内容&#xff0c;如庭审记录、当事人陈述、电话沟通等。传统的人工听写方式效率低、成本高且容易出错。随着语音识别技术的…

作者头像 李华
网站建设 2026/2/6 3:07:57

VIC水文模型完全指南:从零开始掌握流域模拟技术

VIC水文模型完全指南&#xff1a;从零开始掌握流域模拟技术 【免费下载链接】VIC The Variable Infiltration Capacity (VIC) Macroscale Hydrologic Model 项目地址: https://gitcode.com/gh_mirrors/vi/VIC VIC&#xff08;Variable Infiltration Capacity&#xff09…

作者头像 李华
网站建设 2026/2/6 19:44:32

GTE中文语义相似度计算实战:智能招聘简历匹配

GTE中文语义相似度计算实战&#xff1a;智能招聘简历匹配 1. 引言 1.1 业务场景描述 在现代人力资源管理中&#xff0c;企业每天可能收到成百上千份简历&#xff0c;而岗位需求描述&#xff08;JD, Job Description&#xff09;往往具有高度专业化和定制化的特点。传统基于关…

作者头像 李华
网站建设 2026/2/1 5:18:54

django-flask基于python旅游导游管理系统的功能全bja0vffx

目录基于Python的旅游导游管理系统功能摘要后台管理功能行程规划引擎用户交互模块数据分析看板扩展功能项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作基于Python的旅游导游管理系统功能摘要 Django和Fla…

作者头像 李华