监听事件

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="https://unpkg.com/vue"></script>
</head>
<body>
<div id="app-1">
<button v-on:click="counter += 1">Add</button>
<p>这个按钮被点击了{{ counter }}次</p>
</div>
<script type="text/javascript">
var vm1 = new Vue({
el: '#app-1',
data: {
counter: 0
}
})
</script>
</body>
</html>

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

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

<div id="app-2">
<button @click="hello">Hello</button>
</div>
<script type="text/javascript">
var vm2 = new Vue({
el: '#app-2',
data: {
name: 'TanSea'
},
methods: {
hello: function(event) {
alert('Hello, ' + this.name + '!')
if (event) { alert(event.target.tagName) };
}
}
})
</script>

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

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

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

事件修饰符

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

<div id="app-3">
<button @click.once="count">Add</button>
<p>这个按钮被点击了{{ counter }}次</p>
</div>
<script type="text/javascript">
var vm3 = new Vue({
el: '#app-3',
data: {
counter: 0
},
methods: {
count: function() {
this.counter += 1
}
}
})
</script>

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

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

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

<div id="app-3">
<div @click="count">
父元素<br>
<p @click.stop="count">子元素</p>
</div>
<p>这个按钮被点击了{{ counter }}次</p>
</div>
<script type="text/javascript">
var vm3 = new Vue({
el: '#app-3',
data: {
counter: 0
},
methods: {
count: function() {
this.counter += 1
}
}
})
</script>

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

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

按键修饰符

1、按键编码

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

<div id="app-4">
按键编码:<input @keyup.13="confirm" v-model:value="content">
</div>
<script type="text/javascript">
var vm4 = new Vue({
el: '#app-4',
data: {
content: ''
},
methods: {
confirm: function() {
alert(this.content)
}
}
})
</script>

2、按键别名

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

.enter (“回车”键)
.tab (“TAB”键)
.delete (捕获 “删除” 和 “退格” 键)
.esc (“ESC”键)
.space (“空格”键)
.up (向上方向键)
.down (向下方向键)
.left (向左方向键)
.right (向右方向键)

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

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

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

<div id="app-4">
按键别名:<input @keyup.enter.f4="confirm" v-model:value="content">
</div>
<script type="text/javascript">
Vue.config.keyCodes.f4 = 115 var vm4 = new Vue({
el: '#app-4',
data: {
content: ''
},
methods: {
confirm: function() {
alert(this.content)
}
}
})
</script>

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

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

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

<!-- "回车"键 "F4"键 触发事件 -->
<input @keyup.enter.f4="confirm">
<!-- "回车"键 "CTRL"键 触发事件 -->
<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. jQuery EasyUI编辑DataGrid用combobox实现多级联动

    我在项目中设计课程表的时候需要用到老师和分类之间的多级联动. 首先是一张效果图: 下面是实现的代码: <body> <script type="text/javascrip ...

  2. 【泰语歌】กลับคำสาหล่า 歌手:Mike Piromporn

    Darling,Please don't leave me. 很短的一句话,可能会摧毁我们在一起的所有美好时光.

  3. dedecms代码详解 很全面

    dedecms代码研究(1)开篇dedecms 相信大家一定都知道这个cms 系统,功能比较强大,有比较完善的内容发布,还有内容静态化系统,还有就是它有自己独特的标签系统和模板系统.而模板系统也是其他 ...

  4. 将场景导出XML或JSON或二进制而且解析还原场景

    导出unity场景的全部游戏对象信息,一种是XML一种是JSON. 本篇文章我们把游戏场景中游戏对象的.旋转.缩放.平移与Prefab的名称导出在XML与JSON中.然后解析刚刚导出的XML或JSON ...

  5. EditTextView

    package com.egojit.android.sops.views.EditText; import android.content.Context; import android.graph ...

  6. 最详细的PHP flush()与ob

    buffer ---- flush()buffer是一个内存地址空间,Linux系统默认大小一般为4096(1kb),即一个内存页.主要用于存储速度不同步的设备或者优先级不同的 设备之间传办理数据的区 ...

  7. 用SQL语句生成唯一标识

    以前都是在代码中生成GUID值,然后保存到数据库中去,今天发现用sql也能生成GUID值,觉得很新奇,所以记下来. sellect newid();  //得到的即为GUID值 此sql内置函数返回的 ...

  8. QL 获取当前日期,年、月、日、周、时、分、秒

    ?select GETDATE() as '当前日期', DateName(year,GetDate()) as '年', DateName(month,GetDate()) as '月', Date ...

  9. delphi小知识 点(if条件符,to_date)

    1.if条件 与:and 或:or 不等于:<> 等于:= 例子: if(j=1)and(nFH<>0) then begin tLCH:=Trim(copy(tSAMPLEI ...

  10. 使用jquery获取单选按钮radio的值

    <input type="radio" name="gender" value="男" >男</input> < ...