Vue.js学习笔记 第五篇 事件处理
监听事件
<!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学习笔记 第五篇 事件处理的更多相关文章
- Vue.js学习笔记 第七篇 表单控件绑定
本篇主要说明表单控件的数据绑定,这次没有新的知识点 文本框 1.普通文本框 <div id="app-1"> <p><input v-model=&q ...
- Vue.js学习笔记 第八篇 组件
全局注册组件 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <ti ...
- Vue.js学习笔记 第六篇 内置属性
computed属性 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> &l ...
- Vue.js学习笔记 第四篇 列表渲染
遍历数组和对象 和条件选择一样,循环也和其他语言类似,也尝试着用一个例子解决问题 <!DOCTYPE html> <html> <head> <meta ch ...
- Vue.js学习笔记 第三篇 条件渲染
条件选择 条件选择的用法和其他语言类似,一个例子就能解决所有问题 <!DOCTYPE html> <html> <head> <meta charset=&q ...
- Vue.js学习笔记(2)vue-router
vue中vue-router的使用:
- vue.js 学习笔记3——TypeScript
目录 vue.js 学习笔记3--TypeScript 工具 基础类型 数组 元组 枚举 字面量 接口 类类型 类类型要素 函数 函数参数 this对象和类型 重载 迭代器 Symbol.iterat ...
- Vue.js学习笔记:在元素 和 template 中使用 v-if 指令
f 指令 语法比较简单,直接上代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " ...
- Vue.js学习笔记 第一篇 数据绑定
双花括号文本插值 先来个最简单的例子,看完之后立马会用Vue了,是不是很有成就感 <!DOCTYPE html> <html> <head> <meta ch ...
随机推荐
- 理解和使用WPF 验证机制(值得推荐)
首先建立一个demo用以学习和实验WPF Data Validation机制.创建一个数据实体类: public class Employee { public string Name { get; ...
- 【ask】vmware(NAT)中的linux突然无法访问互联网网址,但是直接用ip可以访问。
前两天虚拟机里的linuxmint不知何故,突然无法访问互联网了.依稀记得是升级了win7下面的360安全卫士之后发生的事情.所以, 第1步就开始去找防火墙的各种设置,结果没有查到结果. 第2步猛然看 ...
- PHP中常用的输出语句比较?
面试中经常问到这个,可以看下. 面试问题:比较echo print() print_r() var_dump()? echo(): 可以一次输出多个值,多个值之间用逗号分隔.echo是语言结构(la ...
- MariaDB二进制包简单安装部署
一.简介: MySQL最早是由Michael Widenius在所研发,而在后来Michael先生以10亿美元的价格把MySQL卖给了SUN以后不久SUN就被Oracle公司给收购了,在Oracle收 ...
- C++基础题
刚在网上转看到几道对于巩固基础很有帮助的C++基础题,反正闲着也是闲着,就做了下,具体题型如下: 答案是我自己写,不一定对,如果有朋友看到不对的,欢迎指正,万分感谢! 1. 一个指针类型的对象占用内存 ...
- Vuejs2.0 cnpm 安装脚手架项目模板
NPM 方法 因为npm 安装速度慢,所以我们可以使用淘宝的镜像cnpm 再安装之前 我们需要先安装nodejs 因为vue框架也是基于nodeljs 下载地址:http://nodejs.cn/d ...
- QBuffer简单操作(被看做一个标准的可随机访问的文件,支持信号)
Qt中通过QBuffer类我们可以使用io的方式访问.操作QByteArray中的内容.此时,QByteArray被看做一个标准的可随机访问的文件.例如: QBuffer buffer; char c ...
- MySQL中Cardinality值的介绍
1) 什么是Cardinality 不是所有的查询条件出现的列都需要添加索引.对于什么时候添加B+树索引.一般的经验是,在访问表中很少一部分时使用B+树索引才有意义.对于性别字段.地区 ...
- Dapper-Extensions
https://github.com/tmsmith/Dapper-Extensions
- [转载]威力导演14旗舰破解版(中文简体)|取消30天限制CyberLink&nb
2015月9月15日(当地时间),CyberLink讯连科技发布新一代视频编辑软件 — PowerDirector威力导演14,融合了上个版本发布以来的多次更新升级,威力导演依旧 ...