监听事件

<!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. shell学习五十八天----/proc文件系统

    /proc文件系统 前言:linux中的/proc文件系统,由一组文件夹和文件组成,挂载(mount)与/proc文件夹下. /proc文件系统是一种虚拟文件系统,以文件系统文件夹和文件形式,提供一个 ...

  2. git undo last commit

    $ git commit -m "Something terribly misguided" (1) $ git reset --soft HEAD~ (2) << e ...

  3. SEO前端需要注意的地方

    1 合理的title ,description ,keyswords 搜索引擎对这三项的权重逐渐减小,title 强调重点即可,重要的关键字不要超过两次,而且要靠前. 2 不同的tilte要有所不同, ...

  4. 第一章----python简介

    1.python简介 定义:python是一种计算机程序设计语言,是一种相当高级的语言,是用来编写应用程序的高级编程语言: 特点:优势:简单易用:提供了非常完善的基础代码库:优雅,明确,简单.劣势 : ...

  5. X明X源面试题《二》

    一.解释5种访问修饰符答:public-访问不受限制.private-访问范围为它所属的类.protected-访问范围为它所属的类或从该类派生的类.internal-访问范围为当前程序集.prote ...

  6. LeetCode Problem 2:Two Sum

    描述: Given an array of integers, find two numbers such that they add up to a specific target number. ...

  7. 使用 Docker 部署 MongoDB 分片

    创建配置服务复制集 docker run --name configsvr0 -d mongo:3.6.2-jessie --configsvr --replSet "rs_configsv ...

  8. 洛谷 P1407 [国家集训队]稳定婚姻

    洛谷 这个题面很有意思,像我这样的菜鸡,完全不需考虑婚姻的稳定 性 问题. tarjan裸题,直接讲算法吧: 原配夫妻之间分别连一条边,小情人之间反向连边. 这时候我们会发现一个性质,如果婚姻稳定,那 ...

  9. springcloud zuul

    zuul是springcloud的API网关. 入口也是springmvc的DispatcherServlet. 实际的handler是ZuulController,通过handleRequest方法 ...

  10. request doesn't contain a multipart/form-data or multipart/mixed stream ……

    有文件控件"file"的表单,在提交的时候,直接使用了ajax提交,结果报了一堆错,原来这个东东要提交表单,还要用post方式,最后更改为: $("#saveForm&q ...