首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第 7 章 处理用户交互
7.1 事件的监听与处理
7.1.1 事件监听示例
7.1.2 多事件处理
7.1.3 事件修饰符
7.2 Vue中的事件类型
7.2.1 常用的事件类型
7.2.2 按键修饰符
7.3 实战一:随鼠标移动的小球
7.4 实战二:弹球游戏
第 8 章 组件基础
8.1 关于Vue应用与组件
8.1.1 Vue应用的数据配置选项
8.1.2 定义组件
8.2 组件中数据与事件的传递
8.2.1 为组件添加外部属性
8.2.2 处理组件事件
8.2.3 在组件上使用v-model指令
8.3 自定义组件的插槽
8.3.1 组件插槽的基本用法
8.3.2 多具名插槽的用法
8.4 动态组件的简单应用
8.5 实战:开发一款小巧的开关按钮组件
第 9 章 组件进阶
9.1 组件的生命周期与高级配置
9.1.1 生命周期方法
9.1.2 应用的全局配置选项
9.1.3 组件的注册方式
9.2 组件props属性的高级用法
9.2.1 对props属性进行验证
9.2.2 props的只读性质
9.2.3 组件数据注入
9.3 组件Mixin技术
9.3.1 使用Mixin来定义组件
9.3.2 Mixin选项的合并
9.3.3 进行全局Mixin
9.4 使用自定义指令
9.4.1 认识自定义指令
9.4.2 自定义指令的参数
9.5 组件的Teleport功能
第 10 章 Vue响应性编程
10.1 响应性编程原理与在Vue中的应用
10.1.1 手动追踪变量的变化
10.1.2 Vue中的响应性对象
10.1.3 独立的响应性值Ref的应用
10.2 响应式的计算与监听
10.2.1 关于计算变量
10.2.2 监听响应式变量
10.3 组合式API的应用
10.3.1 关于setup方法
10.3.2 在setup方法中定义生命周期行为
10.4 实战:支持搜索和筛选的用户列表示例
10.4.1 常规风格的示例工程开发
10.4.2 使用组合式API重构用户列表页面
当前位置:
首页>>
技术小册>>
TypeScript和Vue从入门到精通(三)
小册名称:TypeScript和Vue从入门到精通(三)
### 7.1.3 事件修饰符 在Vue.js框架中,结合TypeScript使用Vue时,事件处理是组件交互的核心部分。Vue提供了一套事件修饰符,这些修饰符可以帮助我们更灵活地控制DOM事件的行为,减少代码量,提升开发效率。在深入探讨TypeScript与Vue的集成过程中,了解并掌握这些事件修饰符的使用显得尤为重要。本章将详细介绍Vue中的事件修饰符,并展示如何在TypeScript环境下应用它们。 #### 一、事件修饰符概述 Vue的事件修饰符是一种特殊的后缀,可以添加到`v-on`(或简写为`@`)指令中,用于指示Vue在触发事件时执行额外的操作。这些修饰符主要用于阻止默认事件行为、阻止事件冒泡、设置键盘事件的键码条件等。Vue官方提供了多种事件修饰符,包括但不限于`.stop`、`.prevent`、`.capture`、`.self`、`.once`、`.passive`以及键盘事件修饰符如`.enter`、`.delete`等。 #### 二、常用事件修饰符详解 ##### 1. `.stop` - 阻止事件冒泡 在DOM中,当事件在子元素上被触发时,它会向父元素传播,这个过程称为事件冒泡。有时,我们希望在子元素上触发的事件不再向上传播,这时可以使用`.stop`修饰符。 ```vue <template> <div @click="handleClick"> <button @click.stop="handleClickButton">点击我</button> </div> </template> <script lang="ts"> import { defineComponent } from 'vue'; export default defineComponent({ methods: { handleClick() { console.log('父元素被点击'); }, handleClickButton() { console.log('按钮被点击,且事件不会冒泡到父元素'); } } }); </script> ``` ##### 2. `.prevent` - 阻止默认事件 对于很多HTML元素,如`<a>`、`<form>`等,点击或提交时会触发默认的浏览器行为。有时,我们希望阻止这些默认行为,转而执行自定义的逻辑,这时可以使用`.prevent`修饰符。 ```vue <template> <form @submit.prevent="handleSubmit"> <button type="submit">提交</button> </form> </template> <script lang="ts"> import { defineComponent } from 'vue'; export default defineComponent({ methods: { handleSubmit() { console.log('表单提交,但默认行为已被阻止'); // 在这里执行自定义的提交逻辑 } } }); </script> ``` ##### 3. `.capture` - 使用事件捕获模式 默认情况下,事件是以冒泡模式传播的,即从子元素向父元素传播。通过`.capture`修饰符,我们可以改变这一行为,使事件以捕获模式传播,即先触发父元素上的事件处理函数,再触发子元素上的。 ```vue <template> <div @click.capture="handleClickParent"> <button @click="handleClickButton">点击我</button> </div> </template> <script lang="ts"> import { defineComponent } from 'vue'; export default defineComponent({ methods: { handleClickParent() { console.log('父元素先捕获到点击事件'); }, handleClickButton() { console.log('然后按钮被点击'); } } }); </script> ``` ##### 4. `.self` - 只当事件在该元素本身(不是子元素)触发时触发处理函数 `.self`修饰符可以确保事件处理函数只在事件直接发生在绑定它的元素上时才会被调用,而不会因为事件冒泡而被触发。 ```vue <template> <div @click.self="handleClickDiv"> <button @click="handleClickButton">点击我</button> </div> </template> <script lang="ts"> import { defineComponent } from 'vue'; export default defineComponent({ methods: { handleClickDiv() { console.log('只有直接点击div时才会触发'); }, handleClickButton() { console.log('按钮被点击,但div的点击事件不会触发'); } } }); </script> ``` ##### 5. `.once` - 事件只触发一次 `.once`修饰符用于指定事件处理函数只会被调用一次,之后即自动移除监听器。这对于那些只应响应一次的事件(如弹窗的关闭按钮)非常有用。 ```vue <template> <button @click.once="handleClickOnce">只点击一次有效</button> </template> <script lang="ts"> import { defineComponent } from 'vue'; export default defineComponent({ methods: { handleClickOnce() { console.log('按钮被点击了一次,之后不会再次响应'); } } }); </script> ``` ##### 6. `.passive` - 改进滚动性能 `.passive`修饰符用于将监听器标记为`passive`,即告诉浏览器该监听器永远不会调用`preventDefault()`。这主要用于改善页面滚动性能,因为浏览器可以优化滚动事件的处理。 ```vue <template> <div @wheel.passive="handleWheel">滚动我</div> </template> <script lang="ts"> import { defineComponent } from 'vue'; export default defineComponent({ methods: { handleWheel(event: WheelEvent) { // 注意:这里不能调用event.preventDefault(),因为使用了.passive修饰符 console.log('正在滚动', event.deltaY); } } }); </script> ``` #### 三、键盘事件修饰符 Vue还提供了一系列键盘事件修饰符,用于监听特定按键的触发。这些修饰符以特定的按键名(如`.enter`、`.tab`、`.delete`等)作为后缀,可以非常方便地实现键盘事件的监听和处理。 ```vue <template> <input type="text" @keyup.enter="handleEnter"> <button @click.ctrl="handleClickCtrl">点击我(同时按下Ctrl键)</button> </template> <script lang="ts"> import { defineComponent } from 'vue'; export default defineComponent({ methods: { handleEnter() { console.log('回车键被按下'); }, handleClickCtrl(event: MouseEvent) { if (event.ctrlKey) { console.log('Ctrl键被按下同时点击了按钮'); } // 注意:虽然这里使用了@click.ctrl,但Vue本身并不直接提供.ctrl修饰符, // 这是一个示例来说明你可能需要根据事件对象来判断特定按键是否被按下。 // 对于键盘事件,应直接使用如@keydown.ctrl等修饰符。 } } }); </script> <!-- 注意:上面的handleClickCtrl方法示例并非Vue直接支持的用法, 而是用于说明如何结合事件对象和条件语句来判断特定按键。 对于键盘事件,应直接使用如`@keydown.ctrl`的修饰符。 --> ``` #### 四、总结 Vue的事件修饰符是处理DOM事件时非常强大的工具,它们能够让我们以简洁的方式控制事件的传播、阻止默认行为以及监听特定按键等。在TypeScript与Vue的结合使用中,了解和掌握这些修饰符的使用,能够极大地提升开发效率和代码的可读性。通过本文的介绍,希望读者能够深入理解并熟练运用Vue的事件修饰符,在开发过程中更加得心应手。
上一篇:
7.1.2 多事件处理
下一篇:
7.2 Vue中的事件类型
该分类下的相关小册推荐:
Vue.js从入门到精通(二)
Vue.js从入门到精通(四)
TypeScript和Vue从入门到精通(一)
Vue面试指南
vue项目构建基础入门与实战
TypeScript和Vue从入门到精通(四)
Vue原理与源码解析
Vue源码完全解析
TypeScript和Vue从入门到精通(五)
TypeScript和Vue从入门到精通(二)
VUE组件基础与实战
vuejs组件实例与底层原理精讲