vuejs中的事件有:focus、blur、click(单击)、dblclick、contextmen、mousemove、mouseover、mouseout、mouseup、keydown 、keyup、select、wheel等等。
本教程操作环境:windows7系统、vue2.9.6版,DELL G3电脑。
Event Handler
事件处理
Vuejs中的事件处理非常强大, 也非常重要。 我们一定要学好它。
Event Handler
之所以会被Vuejs放到很高的地位,是基于这样的考虑:
把跟事件相关的代码独立的写出来, 非常容易定位各种逻辑, 维护起来方便。
event handler
被独立出来之后, 页面的DOM
元素看起来就会很简单。 容易理解。当一个页面被关掉时,对应的
ViewModel
也会被回收。那么该页面定义的各种event handler
也会被一并垃圾回收。 不会造成内存溢出。
支持的Event
我们在前面曾经看到过 v-on:click
, 那么,都有哪些事件可以被v-on
所支持呢?
只要是标准的HTML定义的Event
, 都是被Vuejs支持的。
-
focus
(元素获得焦点) -
blur
(元素失去焦点) -
click
(单击 鼠标左键) -
dblclick
(双击鼠标左键) -
contextmenu
(单机鼠标右键) -
mouseover
(指针移到有事件监听的元素或者它的子元素内) -
mouseout
(指针移出元素,或者移到它的子元素上) -
keydown
(键盘动作: 按下任意键) -
keyup
(键盘动作: 释放任意键)
所有HTML标准事件:https://developer.mozilla.org/zh-CN/docs/Web/Events
例:
总共定义了 162个标准事件, 和 几十个非标准事件,以及 Mozilla的特定事件。 如下图所示:
我们不用全部都记住,通常在日常开发中,只有不到20个是最常见的event.
使用 v-on
进行事件的绑定
我们可以认为,几乎所有的事件,都是由 v-on
这个 directive
来驱动的。 所以,本节会对 v-on
有更加详尽的说明。
1. 在 v-on 中使用变量
如下面代码所示,可以在 v-on
中引用变量:
<html> <head> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script> </head> <body> <div id='app'> 您点击了: {% raw %}{{{% endraw %} count }} 次 <br/> <button v-on:click='count += 1' style='margin-top: 50px'> + 1</button> </div> <script> var app = new Vue({ el: '#app', data: { count: 0 } }) </script> </body> </html>
上面的代码,用浏览器打开后, 点击 按钮, 就可以看到 count
这个变量会随之 +1. 如下图所示:
2. 在 v-on
中使用方法名
上面的例子,也可以按照下面的写法来实现:
<html> <head> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script> </head> <body> <div id='app'> 您点击了:{% raw %}{{{% endraw %} count }} 次 <br/> <button v-on:click='increase_count' style='margin-top: 50px'> + 1 </button> </div> <script> var app = new Vue({ el: '#app', data: { count: 0 }, methods: { increase_count: function(){ this.count += 1 } } }) </script> </body> </html>
可以看到,在 v-on:click='increase_count'
中, increase_count
就是一个方法名。
3. 在v-on
中使用方法名 + 参数
我们也可以直接使用 v-on:click='some_function("your_parameter")'
这样的写法,如 下面的例子所示:
<html> <head> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script> </head> <body> <div id='app'> {% raw %}{{{% endraw %} message }} <br/> <button v-on:click='say_hi("明日的Vuejs大神")' style='margin-top: 50px'> 跟我打个招呼~ </button> </div> <script> var app = new Vue({ el: '#app', data: { message: "这是个 在click中调用 方法 + 参数的例子" }, methods: { say_hi: function(name){ this.message = "你好啊," + name + "!" } } }) </script> </body> </html>
使用浏览器打开后,点击按钮,就可以看到下图所示:
4. 重新设计按钮的逻辑
我们在实际开发中,往往会遇到这样的情况: 点击某个按钮,或者触发某个事件后,希望按钮的默认状态。
最典型的例子: 提交表单(e8b36d49ce73ede15e584e9dd86e79e9
)的时候,我们希望先对该表单进行验证。 如果验证不通过,该表单就不要提交。
这个时候,如果希望表单不要提交,我们就要让 这个 submit
按钮,不要有下一步的动作。 在所有的开发语言当中,都会有一个对应的方法,叫做: “preventDefault
”
(停止默认动作)
我们看这个例子:
<html> <head> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script> </head> <body> <div id='app'> 请输入您想打开的网址, <br/> 判断规则是: <br/> 1. 务必以 "http://"开头 <br/> 2. 不能是空字符串 <br/> <input v-model="url" placeholder="请输入 http:// 开头的字符串, 否则不会跳转" /> <br/> <br/> <a v-bind:href="this.url" v-on:click='validate($event)'> 点我确定 </a> </div> <script> var app = new Vue({ el: '#app', data: { url: '' }, methods: { validate: function(event){ if(this.url.length == 0 || this.url.indexOf('http://') != 0){ alert("您输入的网址不符合规则。 无法跳转") if(event){ alert("event is: " + event) event.preventDefault() } } } } }) </script> </body> </html>
上面的代码中,可以看到,我们定义了一个变量: url
. 并且通过代码:
03223805410f39cb2ebaf0bc23560fd7 点我确定 5db79b134e9f6b82c0b36e0489ee08ed
做了两件事情:
把
url
绑定到了该元素上。该元素 在触发
click
事件时,会调用validate
方法。 该方法传递了一个特殊的参数:$event
. 该参数是当前 事件的一个实例。(MouseEvent
)
在 validate
方法中,我们是这样定义的: 先验证是否符合规则。 如果符合,放行,会继续触发 7d01d0a03a49fceb57d12197d8d196cb
元素的默认动作(让浏览器发生跳转) 。 否则的
话,会弹出一个 “alert
” 提示框。
用浏览器打开这段代码,可以看到下图所示:
我们先输入一个合法的地址: http://baidu.com , 可以看到,点击后,页面发生了跳转。 跳转到了百度。
我们再输入一个 “不合法”的地址: https://baidu.com 注意: 该地址不是以 “http://” 开头,所以我们的vuejs
代码不会让它放行。
如下图所示:
进一步观察,页面也不会跳转(很好的解释了 这个时候 7d01d0a03a49fceb57d12197d8d196cb
标签点了也不起作用)
5. Event Modifiers
事件修饰语
我们很多时候,希望把代码写的优雅一些。 使用传统的方式,可能会把代码写的很臃肿。 如果某个元素在不同的event
下有不同的表现,那么代码看起来就会有
很多个 if ...else ...
这样的分支。
所以, Vuejs 提供了 “Event Modifiers
”。
例如,我们可以把上面的例子略加修改:
<html> <head> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script> </head> <body> <div id='app'> 请输入您想打开的网址, <br/> 判断规则是: <br/> 1. 务必以 "http://"开头 <br/> 2. 不能是空字符串 <br/> <input v-model="url" placeholder="请输入 http:// 开头的字符串, 否则不会跳转" /> <br/> <br/> <a v-bind:href="this.url" v-on:click='validate($event)' v-on:click.prevent='show_message'> 点我确定 </a> </div> <script> var app = new Vue({ el: '#app', data: { url: '' }, methods: { validate: function(event){ if(this.url.length == 0 || this.url.indexOf('http://') != 0){ if(event){ event.preventDefault() } } }, show_message: function(){ alert("您输入的网址不符合规则。 无法跳转") } } }) </script> </body> </html>
可以看出,上面的代码的核心是:
<a v-bind:href="this.url" v-on:click='validate($event)' v-on:click.prevent='show_message'> 点我确定 </a> methods: { validate: function(event){ if(this.url.length == 0 || this.url.indexOf('http://') != 0){ if(event){ event.preventDefault() } } }, show_message: function(){ alert("您输入的网址不符合规则。 无法跳转") } }
先是在 7d01d0a03a49fceb57d12197d8d196cb
中定义了两个 click 事件,一个是 click
, 一个是 click.prevent
. 后者表示,如果该元素的click 事件被 阻止了的话, 应该触发什么动作。
然后,在 methods
代码段中,专门定义了 show_message
, 用来给 click.prevent
所使用。
上面的代码运行起来,跟前一个例子是一模一样的。 只是抽象分类的程度更高了一些。 在复杂的项目中有用处。
这样的 “event modifier”,有这些:
- stop propagation 被停止后( 也就是调用了 event.stopPropagation()方法后 ),被触发
- prevent 调用了 event.preventDefault() 后被触发。
- capture 子元素中的事件可以在该元素中 被触发。
- self 事件的 event.target 就是本元素时,被触发。
- once 该事件最多被触发一次。
- passive 为移动设备使用。 (在addEventListeners 定义时,增加passive选项。)
以上的 “event modifier” 也可以连接起来使用。 例如: v-on:click.prevent.self
6. Key Modifiers
按键修饰语
Vuejs 也很贴心的提供了 Key Modifiers, 也就是一种支持键盘事件的快捷方法。 我们看下面的例子:
<html> <head> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script> </head> <body> <div id='app'> 输入完毕后,按下回车键,就会<br/> 触发 "show_message" 事件~ <br/><br/> <input v-on:keyup.enter="show_message" v-model="message" /> </div> <script> var app = new Vue({ el: '#app', data: { message: '' }, methods: { show_message: function(){ alert("您输入了:" + this.message) } } }) </script> </body> </html>
可以看到,在上面的代码中, v-on:keyup.enter="show_message"
为 7d01d0a03a49fceb57d12197d8d196cb
元素定义了事件,该事件对应了 “回车键”。
(严格的说,是回车键被按下后,松开弹起来的那一刻)
我们用浏览器打开上面的代码对应的文件,输入一段文字,按回车,就可以看到事件已经被触发了。
Vuejs 总共支持下面这些 Key modifiers:
- enter 回车键
- tab tab 键
- delete 同时对应了 backspace 和 del 键
- esc ESC 键
- space 空格
- up 向上键
- down 向下键
- left 向左键
- right 向右键
随着 Vuejs 版本的不断迭代和更新,越来越多的 Key modifiers 被添加了进来, 例如 page down
, ctrl
。对于这些键的用法,
大家可以查阅官方文档。
相关推荐:《vue.js教程》
以上是vuejs中有什么事件的详细内容。更多信息请关注PHP中文网其他相关文章!

VUE3基础教程:使用Vue.js插件封装图片上传组件Vue.js是一款流行的前端框架,它使开发者可以用更少的代码创建更高效、灵活的应用程序。尤其是在Vue.js3发布之后,它的优化和改进使得更多的开发者倾向于使用它。这篇文章将介绍如何使用Vue.js3来封装一个图片上传组件插件。在开始之前,需要先确保已经安装了Vue.js和VueCLI。如果尚未安装

本文旨在帮助初学者快速入手Vue.js3,实现简单的选项卡切换效果。Vue.js是一个流行的JavaScript框架,可用于构建可重用的组件、轻松管理应用程序的状态和处理用户界面的交互操作。Vue.js3是该框架的最新版本,相较于之前的版本变动较大,但基本原理并未改变。在本文中,我们将使用Vue.js指令实现选项卡切换效果,目的是让读者熟悉Vue.js的

随着移动互联网和Web技术的迅速发展,越来越多的应用需要提供流畅、快速的用户体验。传统的多页面应用已经无法满足这些需求,而单页面应用(SPA)则成为了解决方案之一。那么,如何快速实现单页面应用呢?本文将介绍如何利用Flask和Vue.js来构建SPA。Flask是一个使用Python语言编写的轻量级Web应用框架,它的优点是灵活、易扩

Vue.js是现代化的前端JavaScript框架之一,它提供了一套完整的工具来构建交互式用户界面。在Vue.js的生态系统中,有各种各样的插件和组件,可以大大简化我们的开发流程。在本篇文章中,我们将介绍如何使用Vue.js插件封装一个日历组件,以方便我们在Vue.js项目中快速使用。Vue.js插件Vue.js插件可以扩展Vue.js的功能。它们可以添加全

Vue.js是一种流行的JavaScript框架,用于构建动态Web应用程序。实现用户登录验证是开发Web应用程序的必要部分之一。本文将介绍使用Vue.js、API、JWT和axios实现登录验证的完整指南。创建Vue.js应用程序首先,我们需要创建一个新的Vue.js应用程序。我们可以使用VueCLI或手动创建一个Vue.js应用程序。安装axiosax

随着大数据时代的到来,数据可视化已经成为了现如今的趋势之一。在Web前端开发的过程中,如何使用Vue.js进行数据可视化处理,成为了许多前端开发者所关注的问题。本文将会介绍如何使用Vue.js组件,封装基于chart.js库的图表。1.了解chart.jsChart.js是一款基于HTML5CanvasElement的简单易用、跨平台的开源图表库,我们可

Vue.js是一款流行的JavaScript框架,它提供了很多方便的特性,所以它在开发Web应用程序时非常有用。Vue.js中的自定义事件系统使其更加灵活,并且可以通过组件事件触发和处理来实现更好的代码重用性。在本文中,我们将讨论如何使用Vue.js的自定义事件。Vue.js中自定义事件的基础在Vue.js中,我们可以通过v-on指令来监听DOM事件。例如,

Vue.js已经成为现代Web开发的中流砥柱。它是一个轻量级的JavaScript框架,提供了数据绑定和组件化的能力,使得开发者能够更加轻松地构建交互型应用程序。而现在,Vue.js的新版本VUE3也已经面世。在本文中,我们将使用VUE3,通过实例,介绍如何在Vue.js中实现动态过滤数据列表。1.准备工作在开始本教程之前,您需要先安装Node.js和Vue


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

WebStorm Mac版
好用的JavaScript开发工具

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

Atom编辑器mac版下载
最流行的的开源编辑器