Vue系列教程(六)事件修饰符

在讲解事件修饰符之前,大家先请看下面的例子:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件修饰符</title>
</head>
<style>
    .inner {
        height: 150px;
        background-color: darkcyan;
    }
</style>
<body>
<div id="app">
    <div class="inner" @click="divHandler">
        <input type="button" value="点击" @click="btnHandler">
    </div>

</div>
<script src="lib/vue.js"></script>
<script>
    var vm = new Vue({
        el: '#app',
        data:{},
        methods:{
            divHandler(){
                console.log('这是触发了div的点击事件')
            },
            btnHandler(){
                console.log('这是触发了btn的点击事件')
            }
        }
    })
</script>
</body>
</html>

页面效果如下:
在这里插入图片描述
这时,我点击按钮,控制台会输出什么呢?
在这里插入图片描述
由于冒泡机制,先触发了里层元素(button)的点击事件,后触发了外层元素(div)的点击事件,今天要讲的不是冒泡机制,而是我们怎么实现点击按钮就只触发按钮的点击事件,点击div就只触发div的点击事件。这个功能用到的就是事件修饰符
使用事件修饰符.stop可以阻止冒泡,使用方法如下:

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

即在@click后面加上.stop,这样在点击按钮的时候就不会触发div的点击事件了。

下面我们看一下其他事件修饰符:

.prevent

.prevent是阻止默认事件修饰符
设想一下需求:

<a href="http://lauyon.com" @click="linkClick">刘阳不吃饭</a>
linkClick(){
   console.log('触发了链接的点击事件')
}

<a>标签的默认事件是跳转页面,我们点击这个<a>标签的时候,页面会直接跳转到网站http://lauyon.com,我们看不到console的输出。现在我们想看到console的输出,阻止<a>标签的默认事件触发。使用.prevent实现:

<a href="http://lauyon.com" @click.prevent="linkClick">刘阳不吃饭</a>

只需要在@click后面加上.prevent即可。

.capture

.capture实现的是捕获功能,设想如下场景:

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

前面说到,由于冒泡原理,当点击按钮的时候,首先触发按钮的点击事件,然后执行div的点击事件。现在我们点击按钮的时候,想先执行div的点击事件,然后执行按钮的点击事件。这个时候就用到了我们的.capture,修改代码如下:

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

还是上面的例子:

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

当点击按钮的时候,触发了div的点击事件,div的点击事件是被动触发的。.self实现的功能是,只有当点击它(如这里的div)本身的时候才会触发,修改代码如下:

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

.once的意思是只触发一次,看下一段代码:

<a href="http://lauyon.com" @click.prevent.once="linkClick">刘阳不吃饭</a>
linkClick(){
   console.log('触发了链接的点击事件')
}

这段代码执行后,第一次点击链接由于阻止了默认事件,控制台会打印触发了链接的点击事件,第二次点击链接则不会再阻止默认事件了。

总结:

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

推荐阅读:
Vue系列教程(一)基础介绍
Vue系列教程(二)v-cloak、v-text、v-html的基本使用
Vue系列教程(三)v-bind指令
Vue系列教程(四)v-on指令定义事件
Vue系列教程(五)跑马灯效果案例
Vue系列教程(六)事件修饰符
Vue系列教程(七)v-model和双向数据绑定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胡 亥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值