监听事件

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title></title>
  6. <script src="https://unpkg.com/vue"></script>
  7. </head>
  8. <body>
  9. <div id="app-1">
  10. <button v-on:click="counter += 1">Add</button>
  11. <p>这个按钮被点击了{{ counter }}次</p>
  12. </div>
  13. <script type="text/javascript">
  14. var vm1 = new Vue({
  15. el: '#app-1',
  16. data: {
  17. counter: 0
  18. }
  19. })
  20. </script>
  21. </body>
  22. </html>

v-on指令,用于绑定事件,事件的处理是对counter变量累加

那么问题来了,实际应用中事件的处理并没有这么简单,在处理复杂的逻辑时,这种方式就不合适了,这时需要定义一个方法来处理

  1. <div id="app-2">
  2. <button @click="hello">Hello</button>
  3. </div>
  4. <script type="text/javascript">
  5. var vm2 = new Vue({
  6. el: '#app-2',
  7. data: {
  8. name: 'TanSea'
  9. },
  10. methods: {
  11. hello: function(event) {
  12. alert('Hello, ' + this.name + '!')
  13. if (event) { alert(event.target.tagName) };
  14. }
  15. }
  16. })
  17. </script>

这里,我们又看到了一个陌生的东西@click,他是v-on:click的简写

到目前为止,我们已经学到了2个指令的简写方法,一个是针对属性的v-bind,一个是针对方法的v-on,可见这2个指令是Vue使用频率最高的2个指令

Vue对象实例化时,多了一个新的参数methods(方法),用来定义事件的处理方法

事件修饰符

1、.once修饰符,事件只会被触发一次,版本:2.1.4+

  1. <div id="app-3">
  2. <button @click.once="count">Add</button>
  3. <p>这个按钮被点击了{{ counter }}次</p>
  4. </div>
  5. <script type="text/javascript">
  6. var vm3 = new Vue({
  7. el: '#app-3',
  8. data: {
  9. counter: 0
  10. },
  11. methods: {
  12. count: function() {
  13. this.counter += 1
  14. }
  15. }
  16. })
  17. </script>

2、.stop修饰符,阻止事件冒泡

先解释一下什么叫事件冒泡,当父元素和子元素同时绑定了一个事件时,子元素先触发事件,父元素再触发事件

和事件冒泡相对应的叫事件捕获,父元素先触发事件,子元素再触发事件

  1. <div id="app-3">
  2. <div @click="count">
  3. 父元素<br>
  4. <p @click.stop="count">子元素</p>
  5. </div>
  6. <p>这个按钮被点击了{{ counter }}次</p>
  7. </div>
  8. <script type="text/javascript">
  9. var vm3 = new Vue({
  10. el: '#app-3',
  11. data: {
  12. counter: 0
  13. },
  14. methods: {
  15. count: function() {
  16. this.counter += 1
  17. }
  18. }
  19. })
  20. </script>

父元素(div)和子元素(p)同时绑定了一个事件,当点击父元素时counter加1,当点击子元素时,由于stop修饰符阻止了事件冒泡,所以counter也只加1

如果去掉stop修饰符,当点击子元素时,counter会加2(子元素和父元素先后触发事件)

按键修饰符

1、按键编码

只有在keyCode是13(“回车”键)时调用事件confirm

  1. <div id="app-4">
  2. 按键编码:<input @keyup.13="confirm" v-model:value="content">
  3. </div>
  4. <script type="text/javascript">
  5. var vm4 = new Vue({
  6. el: '#app-4',
  7. data: {
  8. content: ''
  9. },
  10. methods: {
  11. confirm: function() {
  12. alert(this.content)
  13. }
  14. }
  15. })
  16. </script>

2、按键别名

我们很难记住所有的keyCode,所以Vue提供了一些常用按键别名:

  1. .enter (“回车”键)
  2. .tab (“TAB”键)
  3. .delete (捕获 “删除” “退格” 键)
  4. .esc (“ESC”键)
  5. .space (“空格”键)
  6. .up (向上方向键)
  7. .down (向下方向键)
  8. .left (向左方向键)
  9. .right (向右方向键)

当然,除了这些常用按键别名之外,Vue也提供了自定义按键别名的方法

  1. Vue.config.keyCodes.f4 = 115 //全局自定义按键别名

只有在“回车”键或"F4"键时调用事件confirm

  1. <div id="app-4">
  2. 按键别名:<input @keyup.enter.f4="confirm" v-model:value="content">
  3. </div>
  4. <script type="text/javascript">
  5. Vue.config.keyCodes.f4 = 115
  6.  
  7. var vm4 = new Vue({
  8. el: '#app-4',
  9. data: {
  10. content: ''
  11. },
  12. methods: {
  13. confirm: function() {
  14. alert(this.content)
  15. }
  16. }
  17. })
  18. </script>

3、组合按键,版本:2.1.0+

  1. .ctrl
  2. .alt
  3. .shift
  4. .meta (根据操作系统的不同而不同,Windows系统是WIN键)

组合按键不能单独触发事件,要与非组合按键一起才能触发事件

  1. <!-- "回车"键 "F4"键 触发事件 -->
  2. <input @keyup.enter.f4="confirm">
  3. <!-- "回车"键 "CTRL"键 触发事件 -->
  4. <input @keyup.enter.ctrl="confirm">

Vue.js学习笔记 第五篇 事件处理的更多相关文章

  1. Vue.js学习笔记 第七篇 表单控件绑定

    本篇主要说明表单控件的数据绑定,这次没有新的知识点 文本框 1.普通文本框 <div id="app-1"> <p><input v-model=&q ...

  2. Vue.js学习笔记 第八篇 组件

    全局注册组件 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <ti ...

  3. Vue.js学习笔记 第六篇 内置属性

    computed属性 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> &l ...

  4. Vue.js学习笔记 第四篇 列表渲染

    遍历数组和对象 和条件选择一样,循环也和其他语言类似,也尝试着用一个例子解决问题 <!DOCTYPE html> <html> <head> <meta ch ...

  5. Vue.js学习笔记 第三篇 条件渲染

    条件选择 条件选择的用法和其他语言类似,一个例子就能解决所有问题 <!DOCTYPE html> <html> <head> <meta charset=&q ...

  6. Vue.js学习笔记(2)vue-router

    vue中vue-router的使用:

  7. vue.js 学习笔记3——TypeScript

    目录 vue.js 学习笔记3--TypeScript 工具 基础类型 数组 元组 枚举 字面量 接口 类类型 类类型要素 函数 函数参数 this对象和类型 重载 迭代器 Symbol.iterat ...

  8. Vue.js学习笔记:在元素 和 template 中使用 v-if 指令

    f 指令 语法比较简单,直接上代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " ...

  9. Vue.js学习笔记 第一篇 数据绑定

    双花括号文本插值 先来个最简单的例子,看完之后立马会用Vue了,是不是很有成就感 <!DOCTYPE html> <html> <head> <meta ch ...

随机推荐

  1. CentOS 6.5 MySQL5.6.26源码安装

    一.源码安装cmake工具 从mysql5.5起,mysql源码安装开始使用cmake wget http://cmake.org/files/v3.2/cmake-3.2.3.tar.gztar z ...

  2. openwrt源码下载移植

    openwrt源码下载移植 一.源码下载 1.1下载 由于本人多次尝试从SVN代码地址下载代码,出现无法访问因此这里选择从Git代码地址进行下载.在linux系统命令终端输入 git clone gi ...

  3. Laravel5.1 模型 --一对一关系

    这篇文章主要记录模型的一对一关系,关联关系是Model的一种非常方便的功能. 1 实现一对一关系 1.1 准备工作 首先我们需要创建两张表和对应的两个模型,第一个模型是用户表,第二个模型是账号表. 这 ...

  4. windows下sshfs挂载远程文件夹-server could not connect故障解决

    使用sshfs挂载server上面的文件夹到windows中.轻松方便. 在之前的系统上挂载.没出问题. 近期买了块固态硬盘.装了个系统. 结果在系统上执行sshfs时报例如以下错误: 事实上非常ea ...

  5. Log4j 使用

    源博客 http://www.cnblogs.com/alipayhutu/archive/2012/06/21/2558249.html#3159794 [1]从零开始 a). 新建Java Pro ...

  6. LIS(模板)

    记录一下,O(nlgn)的算法求LIS //HHH #include <iostream> #include <stdio.h> #include <string.h&g ...

  7. 【转】.Net 程序集 签名工具sn.exe 密钥对SNK文件 最基本的用法

    阐述签名工具这个概念之前,我先说说它不是什么: 1.它不是用于给程序集加密的工具,它与阻止Reflector或ILSpy对程序集进行反编译一毛钱关系都没有. 2.它很讨厌人们把它和加密联系在一起. 我 ...

  8. 巨蟒python全栈开发数据库前端9:bootstrap

    1.bootstrap的主网站: http://www.bootcss.com/ (1)bootstrap的CSS样式 (2)bootstrap组件 (3)JavaScript插件 (4)阿里图标库的 ...

  9. Python星号*与**用法分析 What does ** (double star/asterisk) and * (star/asterisk) do for parameters? 必选参数 默认参数 可变参数 关键字参数

    python中*号**的区别 - CSDN博客 https://blog.csdn.net/qq_26815677/article/details/78091452 定义可变参数和定义 list 或 ...

  10. MySQL中Cardinality值的介绍

    1)         什么是Cardinality 不是所有的查询条件出现的列都需要添加索引.对于什么时候添加B+树索引.一般的经验是,在访问表中很少一部分时使用B+树索引才有意义.对于性别字段.地区 ...