一起来学下聊聊Vue中@click.stop和@click.prevent。
一、@click.stop(阻止事件冒泡)
@click.stop:阻止事件冒泡,即阻止点击事件从子组件向父组件传播。
案例:我们在父元素中添加了一个click事件A,并且在其下的子元素中也添加了一个click事件B。
这时我想点击子元素触发子元素的点击事件,但实际上会先触发子组件的事件,然后触发父组件的事件。
<div class='handle-box' @click="clickBox">
<div @click="handleClick('新增')"><text>新增</text></div>
<div @click="handleClick('修改')"><text>修改</text></div>
<div @click="handleClick('删除')"><text>删除</text></div>
</div>
需要使用阻止事件冒泡(也即阻止点击事件继续传播)来解决此问题,
将子组件中的@click改为@click.stop即可:
<div class='handle-box' @click="clickBox">
<div @click.stop="handleClick('新增')"><text>新增</text></div>
<div @click.stop="handleClick('修改')"><text>修改</text></div>
<div @click.stop="handleClick('删除')"><text>删除</text></div>
</div>
二、@click.prevent(阻止事件的默认行为)
@click.prevent:阻止事件的默认行为。它会阻止触发dom的原始事件,而只执行我们自定义的事件。
例如:在代码里写入一个<a>
标签,在点击<a>
标签时,会默认触发一次跳转,跳转到目标URL:
<div>
<a href="http://www.baidu.com" rel="external nofollow" rel="external nofollow" target='_blank'>百度</a>
</div>
但如果我们不想让它跳转,而是在点击<a>
标签时执行我们的自定义方法,那就需要用到@click.prevent啦!用法如下:
<div>
<a href="http://www.baidu.com" rel="external nofollow" rel="external nofollow" target='_blank' @click.prevent='handleClick('修改')'>百度</a>
</div>
这时再点击<a>
标签,就不会跳转到目标URL啦,而是会执行我们自定义的handleClick(‘修改’)事件。
附:Vue @click.stop阻止事件向祖先元素传递(事件冒泡)
任何事件都不触发
<template>
<div @click="fun">
<div @click.stop>
<!--子div-->
</div>
</div>
</template>
<script>
export default {
methods: {
fun() {
// 点击父div时执行的功能
console.log('单击了父div');
},
},
}
</script>
不触发父级事件,触发属于自己的事件
<template>
<div @click="doSomething">
<button @click.stop="doSomethingElse">不会触发父级元素的点击事件</button>
</div>
</template>
<script>
export default {
methods: {
doSomething() {
console.log('doSomething')
},
doSomethingElse() {
console.log('doSomethingElse')
}
}
}
</script>
作者:terry,如若转载,请注明出处:https://www.web176.com/news/frontend/28253.html