Vue.js 事件绑定:v-on 和 @

Vue.js 事件绑定:v-on 和 @

今天我们来聊聊 Vue.js 中一个超常用的功能——事件绑定。只需要写几行代码,你就能轻松让页面和用户的交互灵动起来。Vue 提供了一个指令叫 v-on,还有它的简写形式 @,两者都可以用来绑定事件。

什么是事件绑定?

所谓事件绑定,就是给页面上的元素(比如按钮、输入框)添加事件处理函数。比如点击一个按钮触发某个方法,或者在输入框输入内容时做点什么。

在 Vue.js 中,事件绑定使用 v-on 指令,语法是这样的:

v-on:事件名="方法名"

如果你懒得写太多,还可以用 @ 替代 v-on,语法是:

@:事件名="方法名"

接下来我们具体看看怎么用!

一、基础用法:绑定事件处理函数

来看一个最简单的例子,点击按钮触发一个方法:

<div id="app"><button v-on:click="sayHello">点击我</button>
</div><script>
new Vue({el: '#app',methods: {sayHello() {alert('你好,Vue!');}}
});
</script>

当你点击按钮时,页面会弹出一个提示框,上面写着“你好,Vue!”。这里的 v-on:click 就是绑定了一个点击事件。

更简洁的写法是用 @

<button @click="sayHello">点击我</button>

两者效果完全一样,写哪个随你喜欢。

二、传递参数

有时候,我们需要在事件触发时传递一些参数。比如点击不同的按钮时,传递不同的信息:

<div id="app"><button @click="sayHello('小明')">小明</button><button @click="sayHello('小红')">小红</button>
</div><script>
new Vue({el: '#app',methods: {sayHello(name) {alert(`你好,${name}`);}}
});
</script>

点击“小明”按钮时,会弹出“你好,小明!”,而点击“小红”按钮时,会弹出“你好,小红!”。
在这里,我们通过 @click="sayHello('小明')" 给方法传递了一个参数。

三、特殊对象 $event

如果你需要获取原生的事件对象(比如点击时鼠标的位置),Vue 提供了一个特殊对象叫 $event

来看个例子:

<div id="app"><button @click="showEvent($event)">点我</button>
</div><script>
new Vue({el: '#app',methods: {showEvent(event) {console.log(event);alert(`点击位置:(${event.clientX}, ${event.clientY})`);}}
});
</script>

在这个例子中,$event 是一个原生的事件对象,它包含了鼠标点击时的位置等信息。你可以通过它获取很多有用的数据。

四、事件修饰符

Vue.js 提供了一些修饰符,让事件处理更方便。这些修饰符可以跟在事件名后面,用 . 分隔。比如:

@事件名.修饰符="方法名"

常用的修饰符有:

  1. .stop:阻止事件冒泡

    <div @click="parentClick"><button @click.stop="childClick">点我</button>
    </div>
    

    点击按钮时,parentClick 方法不会触发,因为 .stop 阻止了事件冒泡。

  2. .prevent:阻止默认行为

    <form @submit.prevent="handleSubmit"><button type="submit">提交</button>
    </form>
    

    默认情况下,表单提交会刷新页面,但 .prevent 阻止了这个默认行为。

  3. .self:只有在事件直接发生在绑定的元素上时才触发

    <div @click.self="onClick">点我</div>
    

    点击 div 内部的其他元素时不会触发事件,只有直接点击 div 本身才会触发。

  4. .once:事件只触发一次

    <button @click.once="sayHello">点我</button>
    

    无论你点击多少次,sayHello 方法只会触发一次。

  5. .capture:使用捕获模式触发事件

    <div @click.capture="parentClick"><button @click="childClick">点我</button>
    </div>
    

    在捕获模式下,父元素的事件会先触发,再触发子元素的事件。

五、组合修饰符

你还可以组合多个修饰符,比如:

<button @click.stop.prevent="handleClick">点我</button>

这个按钮的点击事件既阻止冒泡,又阻止默认行为。

六、动态事件绑定

有时候,我们不知道具体的事件名,需要动态地绑定事件。Vue 提供了动态事件的支持:

<div id="app"><button v-on:[eventName]="handleClick">点我</button>
</div><script>
new Vue({el: '#app',data: {eventName: 'click'},methods: {handleClick() {alert('事件触发了!');}}
});
</script>

这里的 v-on:[eventName] 表示动态绑定事件,eventName 的值是 click,所以效果等同于 v-on:click

七、总结

  • v-on 是 Vue 中用来绑定事件的指令,简写形式是 @,两者完全等价。
  • 支持传递参数和使用 $event 获取原生事件对象。
  • 提供了丰富的事件修饰符,比如 .stop.prevent.once 等,极大地简化了事件处理逻辑。
  • 支持动态事件绑定,适用于更灵活的场景。

总之,事件绑定是 Vue 的核心功能之一,灵活又好用。试试在你的项目中用起来吧,相信你会感受到它的强大!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/892600.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能租赁系统提升效率与服务质量的全新解决方案

内容概要 智能租赁系统的崛起就像一场春雨&#xff0c;滋润着租赁行业的每一个角落。它通过先进的技术架构&#xff0c;结合数据管理&#xff0c;优化了以往繁琐的租赁流程&#xff0c;让整个过程如同顺畅的流水。比如&#xff0c;通过智能算法自动计算费用&#xff0c;使得用…

苹果手机(IOS系统)出现安全延迟进行中如何关闭?

苹果手机&#xff08;IOS系统&#xff09;出现安全延迟进行中如何关闭&#xff1f; 一、设置二、隐私与安全性三、失窃设备保护关闭 一、设置 二、隐私与安全性 三、失窃设备保护关闭

VxWorks [安装workbench之修改虚拟机Mac]

问题&#xff1a; 一、安装VMware 下载链接 [VMware 15 pro](https://segmentfault.com/a/1190000022562275)二、修改VMnet1的Mac ** 打开注册表 ** ctrl f 搜索VMnet1 增加字符串值 NetWorkAddress 00D6196C32 三、重启VMnet1 修改完成 四、重启 workbench

Redis十大数据类型详解

Redis&#xff08;一&#xff09; 十大数据类型 redis字符串&#xff08;String&#xff09; string是redis最基本的类型&#xff0c;一个key对应一个value string类型是二进制安全的&#xff0c;意思是redis的string可以包含任何数据。例如说是jpg图片或者序列化对象 一个re…

【从零开始使用系列】StyleGAN2:开源图像生成网络——环境搭建与基础使用篇(附大量测试图)

StyleGAN2 是英伟达团队 NVIDIA 提出的生成对抗网络&#xff08;GAN&#xff09;的一种改进版本。 它通过创新的网络架构&#xff0c;能够生成细节丰富、逼真的图像&#xff0c;特别在高频细节&#xff08;如皮肤纹理、光照等&#xff09;的表现上表现卓越。与传统 GAN 相比&am…

【三维数域】三维数据调度-负载均衡和资源优化

在处理大规模三维数据时&#xff0c;负载均衡和资源优化是确保系统高效运行、提供流畅用户体验的关键。这两者不仅影响到系统的性能和稳定性&#xff0c;还直接决定了用户交互的质量。以下是关于如何在三维数据调度中实现有效的负载均衡和资源优化的详细探讨。 一、负载均衡 负…

成功案例分享 — 芯科科技助力涂鸦智能打造Matter over Thread模块,简化Matter设备开发

芯科科技&#xff08;Silicon Labs&#xff09;的愿景之一是让开发者每天都能够更轻松地开发无线物联网&#xff08;IoT&#xff09;。特别是在拥有相同愿景的合作伙伴的帮助下&#xff0c;我们每天都在取得进步。但是要想弥合知识水平和物联网开发之间的差距仍会面临一定的挑战…

如何将 sqlserver 数据迁移到 mysql

文章目录 前言一、导出SQL Server 数据二、转换数据格式为MySQL兼容格式三、导入数据到MySQL数据库五、使用ETL工具六、通过 navicat 工具七、总结 前言 将 SQL Server 数据迁移到 MySQL 是一个常见的数据库迁移任务&#xff0c;通常涉及以下几个关键步骤&#xff1a;导出 SQL…

10Hive性能优化

10Hive性能优化 1Hive性能问题排查的方式1.1Hive底层原理&#xff1a;explain执行计划详解1.1.1 explain理论1.1.2 实践 2Hive性能调优的方式2.1. SQL语句优化1. union all2. distinct 2.2. 数据格式优化2.3. 小文件过多优化2.3.1解决hive小文件过多问题小文件产生的原因小文件…

安全规约、脱敏规范、敏感逻辑的保护方案、防止 SQL 注入

文章目录 I 强制性安全规约平台资源的防重放机制URL 外部重定向传入的目标地址必须执行白名单过滤。表单、AJAX 提交必须执行 CSRF 安全验证。禁止向 HTML 页面输出未经安全过滤或未正确转义的用户数据。用户请求参数必须做有效性验证防止 SQL 注入用户敏感数据用户权限控制校验…

【数学】概率论与数理统计(五)

文章目录 [toc] 二维随机向量及其分布随机向量离散型随机向量的概率分布律性质示例问题解答 连续型随机向量的概率密度函数随机向量的分布函数性质连续型随机向量均匀分布 边缘分布边缘概率分布律边缘概率密度函数二维正态分布示例问题解答 边缘分布函数 二维随机向量及其分布 …

3.Qt Quick-QML地图引擎之v4.3版本(新增动态轨迹线/海图/天地图街道/天地图卫星)

在上个版本Qt Quick-QML地图引擎之v4版本(新增多模型切换/3D模型欧拉角模拟)_qt加载3d地图-CSDN博客更新了3D模拟功能&#xff0c;在4.3版本增加动态轨迹线、三个地图(海图/天地图街道/天地图卫星)。 4.3版本已经支持qt6 cmake版本&#xff0c;而4.3版本以下支持qt5版本&#x…

数据结构:DisjointSet

Disjoint Sets意思是一系列没有重复元素的集合。一种常见的实现叫做&#xff0c;Disjoint-set Forest可以以接近常数的时间复杂度查询元素所属集合&#xff0c;用来确定两个元素是否同属一个集合等&#xff0c;是效率最高的常见数据结构之一。 Wiki链接&#xff1a;https://en…

vmware-ubuntu22.04配置虚拟机win10,重新上网成功

打开问题显示 Hardware配置 Options配置 最后的Advanced&#xff0c;第一次用了BIOS&#xff0c;然后启动中有更新&#xff0c;然后关闭&#xff0c;再用UEFI启动

【2024年华为OD机试】(B卷,100分)- 数组去重和排序(Java JS PythonC/C++)

一、问题描述 题目描述 给定一个乱序的数组&#xff0c;删除所有的重复元素&#xff0c;使得每个元素只出现一次&#xff0c;并且按照出现的次数从高到低进行排序&#xff0c;相同出现次数按照第一次出现顺序进行先后排序。 输入描述 一个数组 输出描述 去重排序后的数组…

《零基础Go语言算法实战》【题目 2-10】接口的实现

《零基础Go语言算法实战》 【题目 2-10】接口的实现 请指出下面代码中存在的问题。 type Programmer struct { Name string } func (p *Programmer) String() string { return fmt.Sprintf("print: %v", p) } func main() { p : &Programmer{} p.String()…

C++ vtordisp的应用场景

文章目录 问题代码1. 基本概念回顾2. 应用场景虚继承与虚函数并存的类层次结构 3. 编译器相关考虑 问题代码 #include <iostream> using namespace std;class base { public:base() {}virtual void show() { cout << "base:: show"<<endl; } priv…

Git:merge合并、冲突解决、强行回退的终极解决方案

首先还是得避免冲突的发生&#xff0c;无法避免时再去解决冲突&#xff0c;避免冲突方法&#xff1a; 时常做pull、fatch操作&#xff0c;不要让自己本地仓库落后太多版本&#xff1b;在分支操作&#xff0c;如切换分支、合并分支、拉取分支前&#xff0c;及时清理Change&#…

2025网络架构

一、园区网络概述。 园区网络典型层次和区域&#xff1a; 核心层&#xff1a;是园区网骨干&#xff0c;是园区数据交换的核心&#xff0c;联接园区网的各个组成部分&#xff0c;如数据中心、管理中心、园区出口等。汇聚层&#xff1a;处于园区网的中间层次&#xff0c;完成数据…

Vue.config.productionTip = false 不起作用的问题及解决

文章目录 一、问题描述二、解决方法 一、问题描述 当我们在代码页面上引入Vue.js(开发版本)时&#xff0c;运行代码会出现以下提示&#xff0c;这句话的意思是&#xff1a;您正在开发模式下运行Vue&#xff0c;在进行生产部署时&#xff0c;请确保打开生产模式 You are runni…