监听事件

<!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. 【独立开发人员er Cocos2d-x实战 013】Cocos2dx 网络编程实战之星座运势

    学习cocos2d-x和cocos creator的圈子:cocos2d-x:436689827    cocos creator:124727696 本篇文章主要内容:jsoncpp的使用,Coco ...

  2. Word常用操作笔记

    总忘,在这记一下,以下以WPS为例,WORD大同小异,别看网上那些乱写的,就哥这个稳定好使: 1. 在指定页面及其后开始插入页码 2. 修改页码中的总页数 -> 选中总页数的域 -> SH ...

  3. poj 2195(KM求最小权匹配)

    题目链接:http://poj.org/problem?id=2195 思路:我们都知道KM使用来求最大权匹配的,但如果要求最小权匹配,只需把图中的权值改为负值,求一次KM,然后权值和取反即可. ht ...

  4. 在Windows 7 (SP1)上安装Visual Studio 2015

    背景说明:最近重装了Windows 7 系统,那就顺手装个Visual Studio 2015吧,没想到一案装就报错(具体没截图了).只有Windows8 或是Windows 10才能装 2015?答 ...

  5. jQuery EasyUI介绍

    官方定义:http://www.jeasyui.com/ what is JQuery EasyUI ? jQuery EasyUI framework helps you build your we ...

  6. <转> python的垃圾回收机制

    Python的GC模块主要运用了“引用计数”(reference counting)来跟踪和回收垃圾.在引用计数的基础上,还可以通过“标记-清除”(mark and sweep)解决容器对象可能产生的 ...

  7. B. No Time for Dragons(贪心)

    B. No Time for Dragons time limit per test 2.0 s memory limit per test 256 MB input standard input o ...

  8. SharePoint服务器端对象模型 之 使用CAML进行数据查询(Part 4)

    (五)列表查询中的阈值限制 在之前版本的SharePoint 中,如果在查询的时候没有指定返回数目,那么SharePoint将会查找该列表中所有的条目,这可能会造成在SQL表中需要返回大量的条目,极大 ...

  9. CSS如何清除浮动流的多种方案

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. 计算属性 vs 侦听属性 当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的

    https://cn.vuejs.org/v2/guide/computed.html#基础例子 计算属性 vs 侦听属性 Vue 提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:侦听属 ...