【Vue】`v-on` 指令详解:事件绑定与处理的全面指南
文章目录
- 一、`v-on` 指令概述
- 缩写语法
- 二、`v-on` 的基本用法
- 1. 绑定方法
- 2. 内联处理器
- 三、`v-on` 指令的高级用法
- 1. 事件修饰符
- `.stop`
- `.prevent`
- `.capture`
- `.self`
- `.once`
- 2. 按键修饰符
- `.enter`
- 自定义按键修饰符
- 3. 系统修饰符
- 四、`v-on` 指令的实际应用
- 1. 表单处理
- 模板部分 (`<template>`)
- 脚本部分 (`<script>`)
- 2. 动态组件
- 模板部分 (`<template>`)
- 脚本部分 (`<script>`)
- 3. 事件总线
- 五、`v-on` 指令的注意事项
- 1. 事件解绑
- 2. 事件命名
在 Vue.js 框架中,
v-on
是一个非常重要的指令,用于绑定事件监听器并处理用户交互。本文将详细介绍v-on
指令的用法、常见事件、修饰符及其在实际项目中的应用,帮助开发者更好地理解和使用这一强大工具。
一、v-on
指令概述
v-on
是 Vue.js 用于事件监听的指令,可以绑定原生 DOM 事件或自定义事件。其基本语法如下:
<element v-on:event="handler"></element>
其中,event
是要监听的事件类型,handler
是事件处理函数。
缩写语法
为了简洁,Vue.js 提供了 v-on
指令的缩写形式,用 @
符号代替:
<element @event="handler"></element>
例如,绑定点击事件的写法:
<button v-on:click="handleClick">点击我</button>
<!-- 缩写 -->
<button @click="handleClick">点击我</button>
二、v-on
的基本用法
1. 绑定方法
可以将 v-on
指令绑定到一个方法,方法将在事件触发时执行:
<template><button @click="sayHello">点击我</button>
</template><script>
export default {methods: {sayHello() {alert('Hello!');}}
}
</script>
在这个示例中,点击按钮时会触发 sayHello
方法,并显示一个警告框。
2. 内联处理器
除了绑定方法外,还可以直接在 v-on
中使用内联 JavaScript 表达式:
<template><button @click="count++">点击次数: {{ count }}</button>
</template><script>
export default {data() {return {count: 0}}
}
</script>
在这个示例中,每次点击按钮时,count
会递增。
三、v-on
指令的高级用法
1. 事件修饰符
Vue.js 提供了一些事件修饰符,用于简化常见的事件处理逻辑。
.stop
阻止事件传播:
<template><div @click="outerClick"><button @click.stop="innerClick">点击我</button></div>
</template><script>
export default {methods: {outerClick() {alert('外层点击');},innerClick() {alert('内层点击');}}
}
</script>
在这个示例中,点击按钮时只会触发 innerClick
,不会触发 outerClick
。
.prevent
阻止默认行为:
<template><form @submit.prevent="handleSubmit"><button type="submit">提交</button></form>
</template><script>
export default {methods: {handleSubmit() {alert('表单已提交');}}
}
</script>
在这个示例中,点击提交按钮时会触发 handleSubmit
方法,但不会刷新页面。
.capture
使用捕获模式:
<template><div @click.capture="outerClick"><button @click="innerClick">点击我</button></div>
</template><script>
export default {methods: {outerClick() {alert('外层点击');},innerClick() {alert('内层点击');}}
}
</script>
在这个示例中,outerClick
会在 innerClick
之前触发。
.self
仅在事件目标是当前元素自身时触发处理函数:
<template><div @click.self="handleClick"><button>点击我</button></div>
</template><script>
export default {methods: {handleClick() {alert('div 点击');}}
}
</script>
在这个示例中,点击按钮不会触发 handleClick
方法。
.once
只触发一次事件处理器:
<template><button @click.once="handleClick">点击一次</button>
</template><script>
export default {methods: {handleClick() {alert('按钮点击');}}
}
</script>
在这个示例中,按钮点击事件处理器只会触发一次。
2. 按键修饰符
Vue.js 提供了一些按键修饰符,用于处理键盘事件。
.enter
仅在按下回车键时触发:
<template><input @keyup.enter="submit">
</template><script>
export default {methods: {submit() {alert('提交');}}
}
</script>
在这个示例中,仅在按下回车键时会触发 submit
方法。
自定义按键修饰符
可以使用自定义按键修饰符,例如:
<template><input @keyup.13="submit">
</template><script>
export default {methods: {submit() {alert('提交');}}
}
</script>
在这个示例中,按下键码为 13(即回车键)时会触发 submit
方法。
3. 系统修饰符
系统修饰符用于辅助处理系统键(如 Ctrl
、Alt
、Shift
等):
<template><input @keyup.ctrl.enter="submit">
</template><script>
export default {methods: {submit() {alert('提交');}}
}
</script>
在这个示例中,仅在同时按下 Ctrl
和 Enter
键时会触发 submit
方法。
四、v-on
指令的实际应用
1. 表单处理
在表单处理中,v-on
指令可以用于处理各种用户输入事件:
<template><form @submit.prevent="handleSubmit"><input v-model="username" @input="validateUsername"><p v-if="error">{{ error }}</p><button type="submit">提交</button></form>
</template><script>
export default {data() {return {username: '',error: ''}},methods: {validateUsername() {this.error = this.username.length < 3 ? '用户名至少3个字符' : '';},handleSubmit() {if (!this.error) {alert(`提交的用户名:${this.username}`);}}}
}
</script>
在这个示例中,通过 v-on
绑定 input
和 submit
事件,实现表单验证和提交功能。
详细解释:
模板部分 (<template>
)
<template><form @submit.prevent="handleSubmit"><input v-model="username" @input="validateUsername"><p v-if="error">{{ error }}</p><button type="submit">提交</button></form>
</template>
<form @submit.prevent="handleSubmit">
:这里使用v-on
指令的缩写@
来绑定submit
事件,同时使用.prevent
修饰符阻止表单的默认提交行为。这样在表单提交时会调用handleSubmit
方法,但不会刷新页面。<input v-model="username" @input="validateUsername">
:这里使用v-model
指令实现数据双向绑定,将输入框的值绑定到组件的username
数据属性。同时,使用@input
事件监听器,当用户输入时会调用validateUsername
方法进行用户名验证。<p v-if="error">{{ error }}</p>
:这里使用v-if
指令,如果error
数据属性有值,则显示错误信息。<button type="submit">提交</button>
:这是一个提交按钮,点击后会触发表单的submit
事件。
脚本部分 (<script>
)
<script>
export default {data() {return {username: '', // 存储用户名的输入值error: '' // 存储错误信息}},methods: {validateUsername() {// 如果用户名长度小于3个字符,设置错误信息;否则清空错误信息this.error = this.username.length < 3 ? '用户名至少3个字符' : '';},handleSubmit() {// 如果没有错误信息,弹出提示框显示提交的用户名if (!this.error) {alert(`提交的用户名:${this.username}`);}}}
}
</script>
data()
:定义了组件的响应式数据属性,包括username
和error
。username
用于存储用户输入的用户名,error
用于存储错误信息。methods
:定义了两个方法validateUsername
和handleSubmit
。validateUsername()
:这个方法在每次输入框内容改变时触发,用于验证用户名的长度。如果用户名长度小于 3 个字符,则设置error
属性为'用户名至少3个字符'
,否则清空error
。handleSubmit()
:这个方法在表单提交时触发。它首先检查error
属性是否为空,如果为空则表示用户名有效,此时弹出提示框显示提交的用户名。
2. 动态组件
在动态组件中,v-on
指令可以用于处理组件之间的事件通信:
<template><div><child-component @custom-event="handleCustomEvent"></child-component></div>
</template><script>
import ChildComponent from './ChildComponent.vue';export default {components: {ChildComponent},methods: {handleCustomEvent(payload) {alert(`收到子组件事件:${payload}`);}}
}
</script>
在这个示例中,父组件通过 v-on
监听子组件的自定义事件 custom-event
,并在事件触发时执行 handleCustomEvent
方法。
模板部分 (<template>
)
<template><div><child-component @custom-event="handleCustomEvent"></child-component></div>
</template>
<child-component @custom-event="handleCustomEvent"></child-component>
:这里定义了一个子组件<child-component>
并通过v-on
指令(缩写为@
)监听一个名为custom-event
的自定义事件。当子组件触发这个事件时,会调用父组件的方法handleCustomEvent
。
脚本部分 (<script>
)
<script>
import ChildComponent from './ChildComponent.vue';export default {components: {ChildComponent},methods: {handleCustomEvent(payload) {alert(`收到子组件事件:${payload}`);}}
}
</script>
import ChildComponent from './ChildComponent.vue';
:这行代码导入了子组件ChildComponent
。components: { ChildComponent }
:在父组件中注册子组件。methods
:定义了一个方法handleCustomEvent
,用于处理子组件触发的custom-event
事件。handleCustomEvent(payload)
:当custom-event
事件被触发时,这个方法会被调用,并接收事件传递的payload
数据。这里的逻辑是弹出一个提示框,显示收到的事件数据。
3. 事件总线
在大型应用中,可以使用事件总线(Event Bus)来管理不同组件之间的事件通信:
// EventBus.js
import Vue from 'vue';
export const EventBus = new Vue();
<!-- 组件A -->
<template><button @click="sendEvent">发送事件</button>
</template><script>
import { EventBus } from './EventBus';export default {methods: {sendEvent() {EventBus.$emit('custom-event', 'Hello from Component A');}}
}
</script>
<!-- 组件B -->
<template><div>接收到事件:{{ message }}</div>
</template><script>
import { EventBus } from './EventBus';export default {data() {return {message: ''}},created() {EventBus.$on('custom-event', (payload) => {this.message = payload;});}
}
</script>
在这个示例中,组件 A 通过事件总线发送事件,组件 B 接收并处理该事件,实现了组件之间的通信。
五、v-on
指令的注意事项
1. 事件解绑
在组件销毁时需要解绑事件监听器,以防止内存泄漏。Vue.js 会自动处理通过模板绑定的事件,但对于手动绑定的事件,需要手动解绑:
<template><div @click="handleClick">点击我</div>
</template><script>
export default {methods: {handleClick() {console.log('Clicked');}},beforeDestroy() {this.$off('custom-event', this.handleClick);}
}
</script>
2. 事件命名
在自定义事件命名时,尽量使用连字符(-
)而不是驼峰命名,以保持一致性和可读性:
<child-component @custom-event="handleEvent"></child-component>
相关文章:
【Vue】`v-on` 指令详解:事件绑定与处理的全面指南
文章目录 一、v-on 指令概述缩写语法 二、v-on 的基本用法1. 绑定方法2. 内联处理器 三、v-on 指令的高级用法1. 事件修饰符.stop.prevent.capture.self.once 2. 按键修饰符.enter自定义按键修饰符 3. 系统修饰符 四、v-on 指令的实际应用1. 表单处理模板部分 (<template>…...
【Spark On Hive】—— 基于电商数据分析的项目实战
文章目录 Spark On Hive 详解一、项目配置1. 创建工程2. 配置文件3. 工程目录 二、代码实现2.1 Class SparkFactory2.2 Object SparkFactory Spark On Hive 详解 本文基于Spark重构基于Hive的电商数据分析的项目需求,在重构的同时对Spark On Hive的全流程进行详细的…...
哪种SSL证书可以快速签发保护http安全访问?
用户访问网站,经常会遇到访问http网页时,提示网站不安全或者不是私密连接的提示,因为http是使用明文传输,数据传输中可能被篡改,数据不被保护,通常需要SSL证书来给数据加密。 SSL证书的签发速度࿰…...
深入探究理解大型语言模型参数和内存需求
概述 大型语言模型 取得了显著进步。GPT-4、谷歌的 Gemini 和 Claude 3 等模型在功能和应用方面树立了新标准。这些模型不仅增强了文本生成和翻译,还在多模态处理方面开辟了新天地,将文本、图像、音频和视频输入结合起来,提供更全面的 AI 解…...
maven 私服搭建(tar+docker)
maven私服搭建 一、linux安装nexus1、工具下载 二、 docker 搭建nexus1、镜像下载创建目录2、运行nexus3、访问确认,修改默认密码,禁用匿名用户登录4、创建仓库5、创建hostd仓库6、创建Blob Stores7、创建docker私服1、创建proxy仓库2、创建hotsed本地仓…...
银行业务知识全篇(财务知识、金融业务知识)
第一部分 零售业务 1.1 储蓄业务 4 1.1.1 普通活期储蓄(本外币) 4 1.1.2 定期储蓄(本外币) 5 1.1.3 活期一本通 9 1.1.4 定期一本通 10 1.1.5 电话银行 11 1.1.6 个人支票 11 1.1.7 通信存款 13 1.1.8 其他业务规…...
解决ElasticJob项目重启ZooKeeper注册冲突以及zkCli删除目录
解决ElasticJob项目重启ZooKeeper注册冲突以及zkCli删除目录 背景 在现代化的分布式调度系统中,ElasticJob 是一个非常流行的选择。它利用 ZooKeeper 作为注册中心来管理任务分片。然而,有时在项目重启时,会遇到 ZooKeeper 注册冲突的问题&…...
【EI检索】第二届机器视觉、图像处理与影像技术国际会议(MVIPIT 2024)
一、会议信息 大会官网:www.mvipit.org 官方邮箱:mvipit163.com 会议出版:IEEE CPS 出版 会议检索:EI & Scopus 检索 会议地点:河北张家口 会议时间:2024 年 9 月 13 日-9 月 15 日 二、征稿主题…...
vscode通过ssh链接远程服务器上的docker
目录 1 编译docker image1.1 编译镜像1.2 启动镜像 2 在docker container中启动ssh服务2.1 确认是否安装ssh server2.2 修改配置文件2.3 启动ssh服务 3 生成ssh key4 添加ssh公钥到docker container中5 vscode安装插件Remote - SSH6 在vscode中配置 1 编译docker image 一般来…...
使用NIFI连接瀚高数据库_并从RestFul的HTTP接口中获取数据局_同步到瀚高数据库中---大数据之Nifi工作笔记0067
首先来看一下如何,使用NIFI 去连接瀚高数据库. 其实,只要配置好了链接的,连接字符串,和驱动,任何支持JDBC的数据库都可以连接的. 首先我们用一个ListDatabaseTables处理器,来连接瀚高DB 主要是看这里,连接地址,以及驱动,还有驱动的位置 这个是数据连接的配置 jdbc:highgo://…...
IDEA的工程与模块管理
《IDEA破解、配置、使用技巧与实战教程》系列文章目录 第一章 IDEA破解与HelloWorld的实战编写 第二章 IDEA的详细设置 第三章 IDEA的工程与模块管理 第四章 IDEA的常见代码模板的使用 第五章 IDEA中常用的快捷键 第六章 IDEA的断点调试(Debug) 第七章 …...
[M前缀和] lc3096. 得到更多分数的最少关卡数目(前缀和+思维)
文章目录 1. 题目来源2. 题目解析 1. 题目来源 链接:3096. 得到更多分数的最少关卡数目 2. 题目解析 比较有意思的题目,仔细读题后发现解题没啥难度,但是如何写好、写的更简洁需要注意下: 思路: 数据量 1e5&#…...
基础vrrp(虚拟路由冗余协议)
一、VRRP 虚拟路由冗余协议 比如交换机上联两个路由器,由两个路由虚拟出一台设备设置终端设备的网关地址,两台物理路由的关系是主从关系,可以设置自动抢占。终端设备的网关是虚拟设备的ip地址,这样,如果有一台路由设备…...
《绝区零》是一款什么类型的游戏,Mac电脑怎么玩《绝区零》苹果电脑玩游戏怎么样
米哈游的《绝区零》最近在网上爆火呀,不过很多人都想知道mac电脑能不能玩《绝区零》,今天麦麦就给大家介绍一下《绝区零》是一款什么样的游戏,Mac电脑怎么玩《绝区零》。 一、《绝区零》是一款什么样的游戏 《绝区零》是由上海米哈游自主研发…...
Mysql sql技巧与优化
1、解决mysql同时更新、查询问题 2、控制查询优化 hint 3、 优化 特定类型的查 优化 COUNT() 查询 使用 近似值 业务能接受近似值的话,使用explain拿到近似值 优化关联查询 优化子查询 4、优化group by和distinct 优化GROUP BY WITH ROLLUP 5、优化 limit分页 其他…...
7.SpringBoot整合Neo4j
1.引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-neo4j</artifactId> </dependency> 说明:这里引入neo4j的版本跟spring框架的版本有关系。需要注意不同的版本在neo…...
教室管理系统的开发与实现(Java+MySQL)
引言 教室管理系统是学校和培训机构日常运营中不可或缺的工具。本文将介绍如何使用Java、Swing GUI、MySQL和JDBC开发一个简单而有效的教室管理系统,并涵盖系统的登录认证、教室管理、查询、启用、暂停和排课管理功能。 技术栈介绍 Java:作为主要编程…...
Go的入门
一、GO简介 Go语言(也叫 Golang)是Google开发的开源编程语言。 1. 语言特性 Go 语法简洁,上手容易,快速编译,支持跨平台开发,自动垃圾回收机制,天生的并发特性,更好地利用大量的分…...
windows中使用Jenkins打包,部署vue项目完整操作流程
文章目录 1. 下载和安装2. 使用1. 准备一个 新创建 或者 已有的 Vue项目2. git仓库3. 添加Jenkinsfile文件4. 成功示例 1. 下载和安装 网上有许多安装教程,简单罗列几个 Windows系统下Jenkins安装、配置和使用windows安装jenkins 2. 使用 在Jenkins已经安装的基础上,可以开始下…...
RocketMQ中概念知识点记录 和 与SpringBoot集成实现发送 同步、异步、延时、批量、tag、key、事务消息等
1. 消息模型 消息(Message): 是 RocketMQ 中数据传输的基本单位,由主题、标签、键值、消息体等组成。主题(Topic): 消息的分类,类似于邮件的主题,用于对消息进行粗粒度的分类。标签(…...
云计算实训09——rsync远程同步、自动化推取文件、对rsyncd服务进行加密操作、远程监控脚本
一、rsync远程同步 1.rsync基本概述 (1)sync同步 (2)async异步 (3)rsync远程同步 2.rsync的特点 可以镜像保存整个目录树和文件系统 可以保留原有权限,owner,group,时间,软硬链…...
【DGL系列】DGLGraph.out_edges简介
转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 目录 函数说明 用法示例 示例 1: 获取所有边的源节点和目标节点 示例 2: 获取特定节点的出边 示例 3: 获取所有边的边ID 示例 4: 获取所有信息&a…...
掌握品质之钥:ISO9001质量管理体系认证的巨大价值
在当今竞争激烈的市场环境中,企业若要脱颖而出并持续成功,就必须确保其产品和服务质量始终如一。ISO9001质量管理体系认证正是帮助企业实现这一目标的关键工具。本文将深入探讨ISO9001认证的巨大价值以及它如何助力企业提升竞争力、优化内部管理并赢得客…...
网络开局 与 Underlay网络自动化
由于出口和核心设备 部署在核心机房,地理位置集中,业务复杂,开局通常需要网络工程师进站调测。 因此核心层及核心以上的设备(包含核心层设备,旁挂独立AC设备和出口设备)推荐采用WEB网管开局方式或命令行开局方式。 核心以下的设备(包含汇聚层设备、接入层设备和AP)由于数量众…...
MySQL MVCC原理
全称Multi-Version Concurrency Control,即多版本并发控制,主要是为了提高数据库的并发性能。 1、版本链 对于使用InnoDB存储引擎的表来说,它的聚簇索引记录中都包含两个必要的隐藏列: 1、trx_id:每次一个事务对某条…...
编织文字的魔法:探索WebKit的CSS文本效果
编织文字的魔法:探索WebKit的CSS文本效果 在现代网页设计中,文本不仅仅是信息的载体,更是视觉表现的重要元素。WebKit,作为众多浏览器的核心引擎,支持一系列CSS文本效果,使开发者能够创造出引人注目的文本…...
如何在Linux上部署Ruby on Rails应用程序
在Linux上部署Ruby on Rails应用程序是一个相对复杂的过程,需要按照一系列步骤进行。下面是一个基本的部署过程,涵盖了从安装所需软件到部署应用程序的所有步骤。 安装必要的软件 在部署Ruby on Rails应用程序之前,需要确保Linux系统上安装了…...
极狐GitLab 如何管理 PostgreSQL 扩展?
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab :https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署…...
SpringBoot如何使用Kafka来优化接口请求的并发
在Spring Boot中使用 Kafka 来优化接口请求的并发,主要是通过将耗时的任务异步化到Kafka消息队列中来实现。这样,接口可以立即响应客户端,而不需要等待耗时任务完成。 在Spring Boot应用程序中调用Kafka通常涉及使用Spring Kafka库ÿ…...
全面了解不同GPU算力型号的价格!
这两年人工智能(AI)、机器学习(ML)、深度学习和高性能计算(HPC)领域的快速发展,GPU算力已成为不可或缺的资源。企业、研究机构乃至个人开发者越来越依赖于GPU加速计算来处理大规模数据集和复杂模…...
wordpress jquery 无法/最新的疫情情况
关系 例题 伴随矩阵运算...
中英文双版网站怎么做/网络游戏推广员
一脚踏入Vue的世界Vue介绍new一个Vue实例【Vue指令:v-bind】【Vue指令:v-on】【Vue指令:v-if】【Vue指令:v-else】【Vue指令:v-else-if】【Vue指令:v-show】【Vue指令:v-for】更改数组时要注意的…...
做网站与运营一般多少钱/seo技巧是什么
若初次接触移至多线程请先移至JavaSE 多线程初次接触 线程安全与sychornized理解1.作为了解的知识1.1 常见的线程调度模型有哪些?1.2 和线程调度有关的方法2.关于多线程并发环境下,数据的安全问题(重点)。2.1为什么这个是重点2.2什…...
做网站案例/百度网址输入
获取表字段:select *from user_tab_columnswhere Table_Name用户表order by column_name获取表注释:select *from user_tab_commentswhere Table_Name用户表order by Table_Name获取字段注释:select *from user_col_commentswhere Table_Name…...
企业网站建设必要性/天津网络推广公司
原文地址:ELF文件在带加载器的OS中和裸奔的加载及运行 作者:lelee007 工作关系,这个周花了一天时间好好研究了以下ELF文件及可执行ELF文件的加载。中间过程可谓收获不小,呵呵,因为之前搞linux驱动、ARM裸奔始终没有认真…...
如何卸wordpress/销售系统
课程网址 项目地址 发布对象 发布对象:使一个对象能够被当前范围之外的代码所使用对象溢出:一种错误的发布,当一个对象还没有构造完成时,就使它被其他线程所见不正确的发布可变对象导致的两种错误: 1.发布线程意外的所…...