Vue 的 事件修饰符and按键修饰符

1、事件修饰符概览

修饰符说明
 .prevent阻止默认事件 
 .stop阻止冒泡
.once事件只触发一次 
.capture 添加事件侦听器时使用事件捕获模式
.self只有点击当前元素本身时才会触发回调
.passive事件的默认行为立即执行,无需等待事件回调执行完毕(不常用)
.native

将vue组件转换为一个普通的HTML标签,

如果该修饰符用在普通html标签上是不起任何作用的

<!-- 阻止单击事件继续传播 -->
<a v-on:click.stop="doThis"></a><!-- 提交事件不再重载页面 -->
<form v-on:submit.prevent="onSubmit"></form><!-- 修饰符可以串联 -->
<a v-on:click.stop.prevent="doThat"></a><!-- 只有修饰符 -->
<form v-on:submit.prevent></form><!-- 添加事件监听器时使用事件捕获模式 -->
<!-- 即元素自身触发的事件先在此处处理,然后才交由内部元素进行处理 -->
<div v-on:click.capture="doThis">...</div><!-- 只当在 event.target 是当前元素自身时触发处理函数 -->
<!-- 即事件不是从内部元素触发的 -->
<div v-on:click.self="doThat">...</div><!-- 点击事件将只会触发一次 -->
<a v-on:click.once="doThis"></a><!-- 滚动事件的默认行为 (即滚动行为) 将会立即触发 -->
<!-- 而不会等待 `onScroll` 完成  -->
<!-- 这其中包含 `event.preventDefault()` 的情况 -->
<div v-on:scroll.passive="onScroll">...</div>

1.prevent:阻止默认事件(常用)

  • ①.prevent:阻止默认行为
  •         --对于如<a href="www.baidu.com" @click.prevent="linkMethod">百度</a>自带事件的,添加prevent事件后,href跳转路径将不会触发
  • .prevent 用来阻止默认行为,我们可以通过a标签来演示,先来看看未阻止的情况。 
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title><script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
</head>
<body> <div id="app"><a href="http://www.baidu.com" @click='linkclick'>百度一下</a></div><script>var vm = new Vue({el:"#app",data: {},methods: {linkclick(){console.log('阻止默认行为')}}})</script>
</body>
</html>

 

点击“百度一下”,我们可以看到先触发了点击事件,然后页面跳转了

  • 这时我们可以通过 .prevent 修饰符来阻止a标签默认的跳转事件。

<a href="http://www.baidu.com" @click.prevent='linkclick'>百度一下</a>

 

2. stop:阻止事件冒泡(常用)

  • ②.stop:阻止冒泡
  •         --对于嵌套的两级,如果子父级元素都存在click事件,点击子级元素会触发父级元素的事件;如果子级元素设置@click.stop的话就不会触发父级的click事件
  • .stop用来防止冒泡,我们先来看看冒泡的场景。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title><script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
</head>
<body> <div id="app"><div @click="divHandler"><button @click="btnHandler">点击</button></div></div><script>var vm = new Vue({el:"#app",data: {},methods: {divHandler() {console.log('触发了div')},btnHandler() {console.log('触发了button')}}})</script>
</body>
</html>

点击按钮时,可以看到不光按钮的点击事件触发了,而且父容器div的点击事件也触发了,

  • 这时我们就可以使用 .stop 修饰符来阻止这个冒泡。 
<div @click="divHandler"><button @click.stop="btnHandler">点击</button>
</div>

 

3. once:事件只触发一次(常用)

  • ③.once: 事件只触发一次(常用表单提交)

  • .once 表示只触发一次事件处理函数。先来看看没有.once的情况。 
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title><script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
</head>
<body> <div id="app"><button @click="btnHandler">点击</button></div><script>var vm = new Vue({el:"#app",data: {},methods: {btnHandler() {console.log('触发了button')}}})</script>
</body>
</html>

 

可以看到每次点击按钮时都会触发一次事件处理函数,

  • 现在我们给按钮的点击事件添加 .once 修饰符,可以看到事件处理函数只触发了一次。 
<button @click.once="btnHandler">点击</button>

 

4.captrue:使用事件的捕捉模式(不常用)

  • ④.capture: 对于冒泡事件,且存在多个冒泡事件时,存在该修饰符的会优先执行,如果有多个,则从外到内执行

  • .capture 实现捕获触发事件的机制。即是给元素添加一个监听器,当元素发生冒泡时,先触发带有该修饰符的元素。(若有多个该修饰符,则由外而内触发)

以上面的冒泡场景为例,点击按钮时先触发的是按钮的点击事件,然后触发的div的点击事件,现在我们给div的点击事件绑定 .capture 修饰器,可以看到先触发的是div事件。

<div @click.capture="divHandler"><button @click="btnHandler">点击</button>
</div>

5.self:只有event.target是当前操作的元素时才触发事件(不常用)

  • ⑤.self:仅绑定元素自身触发,防止事件冒泡
  •         --对于嵌套的两级,如果子父级元素都存在click事件,点击子级元素会触发父级元素的事件;如果父级元素设置@click.self的话就不会被子级元素的click事件影响
  • .self 实现只有点击当前元素时候,才会触发事件处理函数。

以上面的冒泡场景为例,点击按钮时,按钮和div的点击事件都会被触发。现在我们给div的点击事件绑定 .self 修饰器,(为了便于观察给div加上背景颜色)。可以看到点击按钮时只触发了按钮的点击事件,只有点击div元素时才会触发div的点击事件。

<div @click.self="divHandler" style="background: red;"><button @click="btnHandler">点击</button>
</div>

6.passive:事件的默认行为立即执行,无需等待事件回调执行完毕(不常用)

  • ⑥.passive: 滚动事件的默认行为 (即滚动行为) 将会立即触发,不能和.prevent 一起使用,
  • 浏览器内核线程在每个事件执行时查询prevent,造成卡顿,使用passive将会跳过内核线程查询,进而提升流畅度

7.native: 将vue组件转换为一个普通的HTML标签,如果该修饰符用在普通html标签上是不起任何作用的

2、键盘事件的修饰符

在我们的项目经常需要监听一些键盘事件来触发程序的执行,而Vue中允许在监听的时候添加关键修饰符:

<input v-on:keyup.13="submit">

对于一些常用键,还提供了按键别名: 

<input @keyup.enter="submit">      <!-- 缩写形式 -->

Vue为我们提供了常用的键盘事件,具体如下:

修饰符    

键盘事件
.enter  
 
 按下回车键后触发
.delete    
 
按下backspace或者delete键触发
.esc    
 
按下esc键后触发
.space    
 
按下空格键后触发
.up    
 
按下上键后触发
.down    
 
按下下键后触发
.left    
 
按下左键后触发
.right  
 
 按下右键后触发
.tab   按下tab键触发,该按键配合keydown事件使用,否则会切走焦点

修饰键:

.ctrl      .alt      .shift     .meta

<!-- Alt + C -->
<input @keyup.alt.67="clear">
<!-- Ctrl + Click -->
<div @click.ctrl="doSomething">Do something</div>

与按键别名不同的是,修饰键和 keyup 事件一起用时,事件引发时必须按下正常的按键。换一种说法:如果要引发 keyup.ctrl,必须按下 ctrl 时释放其他的按键;单单释放 ctrl 不会引发事件。

<!-- 按下Alt + 释放C触发 -->
<input @keyup.alt.67="clear"><!-- 按下Alt + 释放任意键触发 -->
<input @keyup.alt="other"><!-- 按下Ctrl + enter时触发 -->
<input @keydown.ctrl.13="submit">
  • 示例:按下backspace或者delete键时输出输入框中的内容
    <div id="app"><input type="text" @keyup.delete="demo"></div><script>var vm = new Vue({el: "#app",methods: {demo(e) {console.log(e.target.value);}}})</script>

  • 但是如果我们想为除了上面的键之外的键绑定事件,这时就可以使用按键原始的key值(注意不是keyCode)去绑定事件。键的key值可以通过e.key来获取到,比如说获取q键的key值,代码如下: 
    <div id="app"><input type="text" @keyup="getQ"></div><script>var vm = new Vue({el: "#app",methods: {getQ(e) {console.log(e.key); // 输出key值console.log(e.keyCode); // 输出keyCode}}})</script>

  • 可以看到q的key值是q,keyCode是81,我们使用q可以为该键绑定事件,代码如下: 
    <div id="app"><input type="text" @keyup.q="qClick"></div><script>var vm = new Vue({el: "#app",methods: {qClick() {console.log("按下了q键");}}})</script>

  • 除了以上两种方式外,还有两种方式可以为键盘绑定事件:
  • (1)使用keyCode绑定事件,例如回车键的keyCode为13,按下回车键输出输入框中数字,不过该方式并不推荐,因为不同的键盘keyCode可能不同,示例代码如下: 
    <div id="app"><input type="text" @keydown.13="demo"></div><script>var vm = new Vue({el: "#app",methods: {demo(e) {console.log(e.target.value);}}})</script>
  • (2)使用定制按键别名的方式绑定事件,语法如下:

Vue.config.keyCodes.自定义键名 = 键码; 

  •  为回车键绑定事件,示例代码如下:
    <div id="app"><input type="text" @keyup.huiche="demo"></div><script>Vue.config.keyCodes.huiche = 13; // 绑定回车事件var vm = new Vue({el: "#app",methods: {demo(e) {console.log(e.target.value);}}})</script>
  • 注意:

对于大写锁定键来说,它的key值是CapsLock,因此在为它绑定事件时,必须将组成它的两个单词小写,并且使用“-”将他们连接,也就是说,它使用caps-lock来绑定事件
ctrl、alt、shift、meta键是系统修饰键,如果为它们绑定keyup事件不会立即起作用,它们起作用的方式为:按下系统修饰键——>按下其他键——>释放其他键,这样事件才会被触发

3、 element的修饰符 (面试回答加分)

<!-- 对于elementUI的input,我们需要在后面加上.native, 因为elementUI对input进行了封装,原生的事件不起作用。 --><input v-model="form.name" placeholder="昵称" @keyup.enter="submit"><el-input v-model="form.name" placeholder="昵称" @keyup.enter.native="submit"></el-input>

4、v-model的修饰符

<1> .lazy
默认情况下,v-model同步输入框的值和数据。可以通过这个修饰符,转变为在change事件再同步。

<input v-model.lazy="msg">

<2> .number
自动将用户的输入值转化为数值类型

<input v-model.number="msg">

<3> .trim
自动过滤用户输入的首尾空格 

<input v-model.trim="msg">

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

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

相关文章

uniapp开发过程一些小坑

问题1、uniapp使用scroll-view的:scroll-into-view“lastChatData“跳到某个元素id时候&#xff0c;在app上不生效&#xff0c;小程序没问题 使用this.$nextTick或者 setTimeout(()>{that.lastChatData 元素id },500) 进行延后处理就可以了。 问题2&#xff1a;uniapp开…

c#算法(10)——求点到直线的距离

前言 在上位机软件开发领域,特别是机器视觉领域,经常会遇到尺寸测量的场景,比如让我们求一个点到一条直线的距离,我们已知了直线上的两个点的坐标,然后又已知了直线外的一个点的坐标,那么如何求出该直线外的一点到直线的距离呢?本文就是来讲解如何求点到直线的距离的,…

ssh登录失败:connection closed by foreign host

问题1&#xff1a; ssh登录不上&#xff0c;连接上就断掉 inetd.conf显示2277已打开&#xff0c;ip也没有冲突。 但是这两个文件是空的(size 0k)&#xff1a; dropbear_dss_host_key dropbear_rsa_host_key 把/etc/dropbear里面的东西删掉,重新生成秘钥文件&#xff1a; …

2024年制造业展望

制造业是国民经济的主体&#xff0c;其重要性不言而喻。就2023年而言&#xff0c;制造业在技术创新、数字化转型和可持续发展方面都取得了重要的进展。以下是对于2024年制造业的发展进行的分析与预测。 1 保持业务平衡仍将是一项挑战 在过去的四年里&#xff0c;制造业高管人…

【STM32CubeMX串口通信详解】USART2 -- DMA发送 + DMA空闲中断 接收不定长数据

&#xff08; 本篇正在编写、更新状态中.....) 文章目录&#xff1a; 前言 前言 本篇&#xff0c;详细地用截图解释 CubeMX 对 USART2 的配置&#xff0c;HAL函数使用&#xff0c;和收发程序的编写。 收、发机制&#xff1a;DMA发送 DAM空闲中断接收。 DMA空…

142基于matlab的移动力过简支梁程序

基于matlab的移动力过简支梁程序&#xff0c;算法采用newmark-belta法&#xff0c;输出简支梁&#xff0c;求解静力位移&#xff0c;自振特性&#xff0c;动力特性。可调节简支梁参数。程序已调通&#xff0c;可直接运行。 142 matlab简支梁自振特性 (xiaohongshu.com)

企业IT基础资源管理的“帮帮团”上线啦——源启云原生基础设施管理平台

为助力企业提升基础资源一体化管理和交付效率&#xff0c;以更先进的基础设施管理方式来满足现代企业业务持续扩展和复杂化的需要&#xff0c;中电金信运用基础设施即代码&#xff08;Infrastructure as Code&#xff0c;简称IaC&#xff09;技术&#xff0c;研发推出源启云原生…

【Python】01快速上手爬虫案例一

文章目录 前言一、VSCodePython环境搭建二、爬虫案例一1、爬取第一页数据2、爬取所有页数据3、格式化html数据4、导出excel文件 前言 实战是最好的老师&#xff0c;直接案例操作&#xff0c;快速上手。 案例一&#xff0c;爬取数据&#xff0c;最终效果图&#xff1a; 一、VS…

光流估计概念和算法

什么是光流&#xff1f; 光流就是物体和观测者之间的互相运动&#xff0c;亮度变化的速度矢量&#xff0c;下图两张图片表示了光流的原理。 光流的算法有几个基本不变的假设&#xff1a; 1&#xff0c;光强不变假设&#xff1b; 一元的n阶泰勒公式&#xff1a; 在这里插入图…

HTTP与HTTPS的工作流程

HTTP与HTTPS的工作流程 http知识点回顾1、HTTP访问的过程2、HTTP常见状态码3、HTTP 协议一共五大特点 https的工作流程1、对称加密2、非对称加密3、https工作流程 http知识点回顾 1、HTTP访问的过程 &#xff08;1&#xff09;解析url&#xff0c;获取 url 中包含的域名&…

C语言第七弹---循环语句

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 循环语句 1、while循环1.1、if和while的对比1.2、while语句的执行流程1.3、while循环的实践1.4、练习 2、for循环2.1、语法形式2.2、for循环的执行流程2.3、for循…

沃通服务器密码机(WTHSM)

概述 沃通服务器密码机&#xff08;WTHSM&#xff09;由沃通CA自主设计开发&#xff0c;严格遵照国密局颁布技术规范&#xff0c;获得国密局颁发《商用密码产品认证证书》&#xff0c;是一款多安全功能、高稳定性、可扩展和快速部署的软硬件集成化安全设备&#xff0c;为应用提…

【手撕C语言 第八集】函数栈帧的创建与销毁

文章目录 一、什么是函数栈帧&#xff1f;二、函数栈帧能解决什么问题呢&#xff1f;&#xff08;1&#xff09;局部变量是如何创建的&#xff1f;&#xff08;2&#xff09;为什么局部变量不初始化内容是随机的&#xff1f;&#xff08;3&#xff09;函数调用时参数是如何传递…

电磁兼容设计要点

电磁兼容的问题往往发生于高频状态下&#xff0c;个别情况除外&#xff08;Dips电压暂降与中断&#xff09;除外。高频思维&#xff0c;总而言之&#xff0c;就是器件的特性、电路的特性&#xff0c;在高频情况下和常规中低频状态下是不一样的&#xff0c;如果仍然按照普通的控…

Go 定时器:如何避免潜在的内存泄漏陷阱

这篇文章将探讨的是 Go 中如何高效使用 timer&#xff0c;特别是与select 一起使用时&#xff0c;如何防止潜在的内存泄漏问题。 引出问题 先看一个例子&#xff0c;我们在 Go 中的 select 使用定时器&#xff0c;实现为消息监听加上超时能力。 核心代码&#xff0c;如下所示…

已解决Error:AttributeError: module ‘numpy‘ has no attribute ‘bool‘.

文章目录 引言报错分析解决方案1&#xff1a;降低NumPy版本解决方案2&#xff1a;更改NumPy源码 结尾 引言 在Python编程的世界里&#xff0c;NumPy无疑是一个不可或缺的库。它不仅在处理大规模数值计算中发挥着核心作用&#xff0c;而且为众多开发者提供了强大的支持。然而&a…

无刷电机学习-方波电调 程序篇1(AM32)

一、AM32简介 AM32 固件专为 ARM 处理器设计&#xff0c;用于控制无刷电机 (BLDC)。该固件旨在安全、快速、平滑、快速启动和线性油门。它适用于多种车辆类型和飞行控制器。 AM32具有以下特点&#xff1a; 可通过 betaflight 直通、单线串行或 arduino 升级固件伺服 PWM、Dsh…

Spring RabbitMQ那些事(3-消息可靠传输和订阅)

目录 一、序言二、生产者确保消息发送成功1、为什么需要Publisher Confirms2、哪些消息会被确认处理成功 三、消费者保证消息被处理四、Spring RabbitMQ支持代码示例1、 application.yml2、RabbigtMQ配置3、可靠生产者配置4、可靠消费者配置5、测试用例 一、序言 在有些业务场…

外包干了3年,跑路了。。。

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 故事的开始 最近这几天有点忧伤&#xff0c;因为带我的师傅要跑…

Vue3 Suspense 优雅地处理异步组件加载

✨ 专栏介绍 在当今Web开发领域中&#xff0c;构建交互性强、可复用且易于维护的用户界面是至关重要的。而Vue.js作为一款现代化且流行的JavaScript框架&#xff0c;正是为了满足这些需求而诞生。它采用了MVVM架构模式&#xff0c;并通过数据驱动和组件化的方式&#xff0c;使…