热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

前端_Vue_6.事件处理

文章目录一、事件处理1.1.监听事件1.2.内联事件处理器1.3.方法事件处理器1.3.1.方法与内联事件判断1.4.在内联处理器中调用方法1.5.在内联事件处理器中访问事件参数1


文章目录


  • 一、事件处理
    • 1.1. 监听事件
    • 1.2. 内联事件处理器
    • 1.3. 方法事件处理器
      • 1.3.1. 方法与内联事件判断

    • 1.4. 在内联处理器中调用方法
    • 1.5. 在内联事件处理器中访问事件参数
    • 1.6. 事件修饰符
    • 1.7. 按键修饰符
      • 1.7.1. 按键别名
      • 1.7.2. 系统按键修饰符
      • 1.7.3. .exact 修饰符

    • 1.8. 鼠标按键修饰符






一、事件处理

1.1. 监听事件

我们可以使用 v-on 指令(简写位@)来监听DOM事件,并在事件触发时执行对应的Javascript。用法:v-on:click=“methodName” 或 @click=“handler”。

事件处理器的值可以是:


  1. 内联事件处理器:事件被触发时执行的内联Javascript语句(与onclick类似)。
  2. 方法事件处理器:一个指向组件上定义的方法的属性名或是路径。

1.2. 内联事件处理器

内联事件处理器通常用于简单场景(内联这玩意儿,也称行内,一般是写在标签上的,这就注定了它不宜搞太复杂),例如:

data() {
return {
count: 0
}
}

<button &#64;click&#61;"count&#43;&#43;">Add 1button>
<p>Count is:{{ count }}p>

1.3. 方法事件处理器

随着事件处理器的逻辑变得复杂&#xff0c;内联代码方式变得不够灵活。因此 v-on 也可以接受一个方法名或对某个方法的调用。

举例来说&#xff1a;

data() {
return {
name: &#39;Vue.js&#39;
}
},
methods: {
greet(event) {
// 方法中的this指向当前活跃的组件实例
alert(&#39;Hello ${this.name}!&#39;)
// event 是 DOM 原生事件
if (event) {
alert(event.target.tagName)
}
}
}


<button &#64;click&#61;"greet">Greetbutton>

方法事件处理器会自动接收原生DOM事件并触发执行。在上面的例子中&#xff0c;我们能够通过被触发事件的 event.target.tagName 访问到该 DOM 元素。


1.3.1. 方法与内联事件判断

模板编译器会通过检查 v-on 的值是否是合法的Javascript标识符或属性访问路径来断定是何种形式的事件处理器。举例来说&#xff0c; foo 、 foo.bar 和 foo[‘bar’] 会被视为方法事件处理器&#xff0c;而 foo() 和 count&#43;&#43; 会被视为内联事件处理器。


1.4. 在内联处理器中调用方法

除了直接绑定方法名&#xff0c;你还可以在内联事件处理器中调用方法。这允许我们向方法传入自定义参数以代替原生事件&#xff1a;

methods: {
say(message) {
alert(message)
}
}

<button &#64;click&#61;"say(&#39;hello&#39;)">Say hellobutton>
<button &#64;click&#61;"say(&#39;bye&#39;)">Say byebutton>

1.5. 在内联事件处理器中访问事件参数

有时我们需要在内联事件处理器中访问原生 DOM 事件。你可以向该处理器方法传入一个特殊的 $event 变量&#xff0c;或者使用内联箭头函数&#xff1a;


<button &#64;click&#61;"warn(&#39;Form cannot be submitted yet.&#39;, $event)">
Submit
button>

<button &#64;click&#61;"(event) &#61;> warn(&#39;Form cannot be submitted yet.&#39;, event)">
Submit
button>

methods: {
warn(message, event) {
// 这里可以访问 DOM 原生事件
if (event) {
event.preventDefault()
}
alert(message)
}
}

1.6. 事件修饰符

在处理事件时调用 event.preventDefault() 或 event.stopPropagation() 是很常见的。尽管我们可以直接在方法内调用&#xff0c;但如果方法能更专注于数据逻辑而不用去处理DOM事件的细节会更好。

为解决这一问题&#xff0c;Vue为 v-on 提供了 事件修饰符。修饰符是用 . 表示的指令后缀&#xff0c;包含以下这些&#xff1a;


  • .stop
  • .prevent
  • .selt
  • .capture
  • .once
  • .passive


<a &#64;click.stop&#61;"doThis">a>

<form &#64;submit.prevent&#61;"onSubmit">form>

<a &#64;click.stop.prevent&#61;"doThat">a>

<form &#64;submit.prevent>form>


<div &#64;click.selt&#61;"doThat">...div>


提示&#xff1a;
使用修饰符时需要注意调用顺序&#xff0c;因为相关代码是以相同的顺序生成的。因此使用 &#64;click.prevent.self 会阻止元素及其子元素的所有点击事件的默认行为而&#64;click.selt.prevent则只会阻止对元素本身的点击事件的默认行为。


.capture、.once和.passive修饰符与原生 addEventListener 事件相对应&#xff1a;



<div &#64;click.capture&#61;"doThis">...div>

<a &#64;click.once&#61;"doThis">a>


<div &#64;scroll.passive&#61;"onScroll">...div>

.passive 修饰符一般用于触摸事件的监听器&#xff0c;可以用来改善移动端设备的滚屏性能。



提示
请勿同时使用 .passive 和 .prevent&#xff0c;因为.passive 已经向浏览器表明了你不想阻止事件的默认行为。如果你这么做了&#xff0c;则.prevent会被忽略&#xff0c;并且浏览器会抛出警告。



1.7. 按键修饰符

在监听键盘事件时&#xff0c;我们经常需要检查特定的按键。Vue允许在 v-on 或 &#64; 监听事件时添加按键修饰符。


<input &#64;keyup.enter&#61;"submit"/>

你可以直接使用 KeyboardEvent.key 暴露的按键名称作为修饰符&#xff0c;但需要转为 kebab-case&#xff08;短横杠&#xff09;形式。

<input &#64;keyup.page-down&#61;"onPageDown"/>

该例中&#xff0c;仅回在 $event.key为PageDown时调用事件处理器。


1.7.1. 按键别名

Vue为一些常用的按键提供了别名&#xff1a;


  • .enter
  • .tab
  • .delete&#xff08;捕获 “Delete” 和 “Backspace” 两个按键&#xff09;
  • .esc
  • .space
  • .up
  • .down
  • .left
  • .right

1.7.2. 系统按键修饰符

你可以使用以下系统按键修饰符来触发鼠标或键盘事件监听器&#xff0c;只有当按键被按下时才会触发。


  • .ctrl
  • .alt
  • .shift
  • .meta

举例来说&#xff1a;


<input &#64;keyup.alt.enter&#61;"clear"/>

<div &#64;click.ctrl&#61;"doSomething">Do something div>


提示
系统按键修饰符与常规按键不同。与 keyup 事件一起使用时&#xff0c;该按键必须在事件发出时处于按下状态。换句话说&#xff0c;keyup.ctrl 只会在你仍然按住 ctrl 但松开了另一个键时被触发。若你单独松开 ctrl 键将不会触发。



1.7.3. .exact 修饰符

.exact 修饰符允许控制触发一个事件所需的确定组合的系统按键修饰符。


<button &#64;click.ctrl&#61;"onClick">Abutton>

<button &#64;click.ctrl.exact&#61;"onCtrlClick">Abutton>

<button &#64;click.exact&#61;"onClick">Abutton>

1.8. 鼠标按键修饰符


  • .left
  • .right
  • .middle

这些修饰符将处理程序限定为由特定鼠标按键触发的事件。







推荐阅读
  • SQLite数据库CRUD操作实例分析与应用
    本文通过分析和实例演示了SQLite数据库中的CRUD(创建、读取、更新和删除)操作,详细介绍了如何在Java环境中使用Person实体类进行数据库操作。文章首先阐述了SQLite数据库的基本概念及其在移动应用开发中的重要性,然后通过具体的代码示例,逐步展示了如何实现对Person实体类的增删改查功能。此外,还讨论了常见错误及其解决方法,为开发者提供了实用的参考和指导。 ... [详细]
  • 地图集成方法与应用 ... [详细]
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • com.sun.javadoc.PackageDoc.exceptions()方法的使用及代码示例 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 在处理 XML 数据时,如果需要解析 `` 标签的内容,可以采用 Pull 解析方法。Pull 解析是一种高效的 XML 解析方式,适用于流式数据处理。具体实现中,可以通过 Java 的 `XmlPullParser` 或其他类似的库来逐步读取和解析 XML 文档中的 `` 元素。这样不仅能够提高解析效率,还能减少内存占用。本文将详细介绍如何使用 Pull 解析方法来提取 `` 标签的内容,并提供一个示例代码,帮助开发者快速解决问题。 ... [详细]
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
  • 提升Android开发效率:Clean Code的最佳实践与应用
    在Android开发中,提高代码质量和开发效率是至关重要的。本文介绍了如何通过Clean Code的最佳实践来优化Android应用的开发流程。以SQLite数据库操作为例,详细探讨了如何编写高效、可维护的SQL查询语句,并将其结果封装为Java对象。通过遵循这些最佳实践,开发者可以显著提升代码的可读性和可维护性,从而加快开发速度并减少错误。 ... [详细]
  • 作为软件工程专业的学生,我深知课堂上教师讲解速度之快,很多时候需要课后自行消化和巩固。因此,撰写这篇Java Web开发入门教程,旨在帮助初学者更好地理解和掌握基础知识。通过详细记录学习过程,希望能为更多像我一样在基础方面还有待提升的学员提供有益的参考。 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 技术分享:深入解析GestureDetector手势识别机制
    技术分享:深入解析GestureDetector手势识别机制 ... [详细]
  • 深入解析 Vue 中的 Axios 请求库
    本文深入探讨了 Vue 中的 Axios 请求库,详细解析了其核心功能与使用方法。Axios 是一个基于 Promise 的 HTTP 客户端,支持浏览器和 Node.js 环境。文章首先介绍了 Axios 的基本概念,随后通过具体示例展示了如何在 Vue 项目中集成和使用 Axios 进行数据请求。无论你是初学者还是有经验的开发者,本文都能为你解决 Vue.js 相关问题提供有价值的参考。 ... [详细]
  • 在探讨C语言编程文本编辑器的最佳选择与专业推荐时,本文将引导读者构建一个基础的文本编辑器程序。该程序不仅能够打开并显示文本文件的内容及其路径,还集成了菜单和工具栏功能,为用户提供更加便捷的操作体验。通过本案例的学习,读者可以深入了解文本编辑器的核心实现机制。 ... [详细]
  • 探讨 `org.openide.windows.TopComponent.componentOpened()` 方法的应用及其代码实例分析 ... [详细]
author-avatar
cindy翻不清的旧伟_334
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有