什么是事件修饰符

其实就是对事件的一些影响,如下

.stop 阻止冒泡

.prevent 阻止默认事件

.capture 添加事件侦听器时使用事件捕获模式

.self 只当事件在该元素本身(比如不是子元素)触发时触发回调

.once 事件只触发一次

先看一遍,下面我会详细介绍这些事件修饰符

没有事件修饰符的问题

HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title> <script type="text/javascript" src="../lib/vue-2.6.10.js"></script> <style>
.inner{
height: 150px;
background-color: pink;
}
</style> </head>
<body> <!-- 这个div就是MVVM中的V,View -->
<div id="app"> <div class="inner" @click="divHandler">
<input type="button" value="点我" @click="btnHandler"></input>
</div> </div> <script>
// 这个vm就是MVVM中的VM,ViewModel
var vm=new Vue({
el: '#app',
// 这个data就是MVVM中的M,Model
data: {
},
methods: {
divHandler(){
console.log('这个是inner div的点击事件')
},
btnHandler(){
console.log('这个是btn 按钮的点击事件')
}
} }) </script> </body>
</html>

运行

点击按钮,你会发现控制台下先输出按钮的log,再输出外层的div的log,这个就是冒泡机制

现在我的目的是,只触发按钮的log,不触发div的log,使用事件修饰符

使用事件修饰符

.stop阻止冒泡

把按钮的HTML修改成如下

<input type="button" value="点我"  @click.stop="btnHandler"></input>

加了.stop之后就没有冒泡了,所以按钮的事件执行之后,不会冒泡外层的事件了,所以我们看结果成功的实现了阻止冒泡

.prevent 阻止默认事件

默认事件最经典的就是a标签的链接默认跳转

HTML如下

<a href="http://www.cnblogs.com/yunquan/" @click="linkHandler">蜀云泉的博客</a>

Vue的事件自己加这个

linkHandler(){
console.log('这个是link链接的点击事件')
}

你点击链接,肯定会跳转我的博客的,这就是默认事件,我们加上.prevent

<a href="http://www.cnblogs.com/yunquan/" @click.prevent="linkHandler">蜀云泉的博客</a>

你再点击,就不会跳转了。

.capture 添加事件侦听器时使用事件捕获模式

所谓的捕获模式,就是冒泡模式的反向,冒泡模式是先内层后外层,捕获模式是先外层后内层,HTML如下

<div class="inner" @click.capture="divHandler">
<input type="button" value="点我" @click="btnHandler"></input>
</div>

效果图如下:

.self 只当事件在该元素本身(比如不是子元素)触发时触发回调

点击按钮的时候,div会因为冒泡机制也被调用,所以可以给div加一个self,就是只有我点击div本身的时候才会调用div的log

   <div class="inner" @click.self="divHandler">
<input type="button" value="点我" @click="btnHandler"></input>
</div>

.once 事件只触发一次

就是事件只触发一次,还以链接为例,加了once之后,第一次点击链接不会跳转,再次点击就可以跳转了

<a href="http://www.cnblogs.com/yunquan/" @click.prevent.once="linkHandler">蜀云泉的博客</a>

.stop和.self的区别

学了事件修饰符之后,stop和self有一点点像是吧,但是区别也很大。

stop是直接阻止了冒泡行为,self仅仅阻止了自身的冒泡,并没有阻止整个冒泡机制

假如按钮外部有两个div,一个父div一个子div,按钮加个.stop就没有冒泡行为了

子div加个.self之后,冒泡还是有的,父div会被冒泡机制影响,所以通俗的讲

.stop是斩草除根,.self是独善其身

防盗链接:本博客由蜀云泉发表

Vue学习笔记五:事件修饰符的更多相关文章

  1. 学习Vue第三节,事件修饰符stop、prevent、capture、self、once

    事件修饰符: .stop 阻止冒泡 .prevent 阻止默认事件 .capture 添加事件侦听器时使用事件捕获模式 .self 只当事件在该元素本身(比如不是子元素)触发时触发回调 .once 事 ...

  2. vue学习笔记(四)事件处理器

    前言 在上一章vue学习笔记(三)class和style绑定的内容中,我们学习了如何在vue中绑定class和style,介绍了常用的绑定方法,class的数组绑定和对象绑定以及style的数组绑定和 ...

  3. Vue之@click、事件修饰符@click.stop与@click.prevent、按键修饰符@keyup.enter

    1.绑定监听@click: (以监听click为例,其他如keyup,用法类似)  v-on:click="fun"  @click="fun"  @click ...

  4. 0025 Java学习笔记-面向对象-final修饰符、不可变类

    final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...

  5. HTML学习笔记5:修饰符和特殊标签

    ①修饰符:     作用:修饰显示的方式,并不改变网页的结构,需要修饰的内容写在修饰标签内     常用文字和段落修饰符: 文字斜体:<i></i>  或  <em> ...

  6. SAS学习笔记33 格式修饰符

    冒号(:)格式修饰符 从非空格开始读取变量所对应的数据,直到满足以下任何一种情况 遇到下一个空格列 对应变量所定义的长度已经读满 数据行结束 &格式修饰符 修饰所读取为字符型的列数据中含有一个 ...

  7. 吴裕雄--天生自然C++语言学习笔记:C++ 修饰符类型

    C++ 允许在 char.int 和 double 数据类型前放置修饰符.修饰符用于改变基本类型的含义,所以它更能满足各种情境的需求. 下面列出了数据类型修饰符: signed unsigned lo ...

  8. Vue学习笔记(五)——配置开发环境及初建项目

    前言 在上一篇中,我们通过初步的认识,简单了解 Vue 生命周期的八个阶段,以及可以应用在之后的开发中,针对不同的阶段的钩子采取不同的操作,更好的实现我们的业务代码,处理更加复杂的业务逻辑. 而在这一 ...

  9. vue学习笔记(五)条件渲染和列表渲染

    前言 在众多的编程语言中,我们的基础语法总是少不了一些专业语法,比如像定义变量,条件语句,for循环,数组,函数等等,vue.js这个优秀的前端框架中也有同样的语法,我们换一个名词,将条件语句改成专业 ...

随机推荐

  1. vue input输入框长度限制

    今天在开发登录页时,需要设置登录输入框的长度,输入类型为number <input type="number" maxlength="11" placeh ...

  2. token登录

    ①定义 Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再 ...

  3. 导入虚拟机vmware,此主机支持Intel VT-x,但Intel VT-x处于禁用状态和黑屏

    解决方法:进入BIOS(按什么键进入bios,需要看你用什么电脑),把Intel Virtualization Technology         设置enabled 然后是黑屏解决方法:管理员模式 ...

  4. hbase rowkey 的设计

    什么是rowkey Hbase是一个分布式的.面向列的数据库,它和一般关系型数据库的最大区别是:HBase很适合于存储非结构化的数据,还有就是它基于列的而不是基于行的模式. Hbase是采用K,V存储 ...

  5. docker部署postgresql时,data目录不生效的问题探究

    今天用docker部署postgresql,用的是官方的镜像.结果挂载完 /var/lib/postgresql/data目录后,和容器里的目录其实并没有挂载成功. 母机上的目录并没有成功挂载到容器里 ...

  6. emacs 文本替换

    文本替换方法: M-% (query-replace) 输入 响应 SPC 或者 y 替换当前匹配并前进到下一个匹配处 DEL 或者 n 忽略此次匹配并前进到下一个匹配处 . 替换当前匹配并退出 , ...

  7. Vue.js05:vue内联样式

    对象就是无序键值对的集合 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  8. 对ES6的yield示例分析

    近期ES6标准如火如荼的发展,其中主要还是各大浏览器的支持,最重要厂商支付宝,微信的支持,使得国内的发展也很迅猛. 这里主要是对yield关键字的,yield实际上可以看作是一种新的中断机制,大家都知 ...

  9. 优先队列Priority Queue和堆Heap

    对COMP20003中的Priority queue部分进行总结.图片来自于COMP20003 queue队列,顾名思义特点先进先出 priority queue优先队列,出来的顺序按照优先级prio ...

  10. git 解决多人修改相同的文件导致的冲突

    git冲突处理     (场景:A和B修改相同的文件,A先提交到远程仓库,然后B提交push报错,远程仓库有更改,git自动合并失败,需要手动合并 提示错误:Automatic merge faile ...