关于组件button里面处理click事件
来源:7-8 通用组件:button 按钮功能实现-2

一只小木马
2022-09-05
按照老师您的方法处理了click事件,但是在search组件中绑定click时,点击button,这个事件触发了两次 我猜测一次是在search组件中因为点击了button,触发了一次 还有一次是传入到button中,然后通过emit又触发了一次
而且我给button组件设置loading,这个click事件也还是出发了一次(search组件中因为点击了button),所以有点不明白是怎么回事
通用组件button
<button
class="text-sm text-center flex justify-center items-center duration-200"
:class="[
typeEnum[type],
sizeEnum[size],
shapeEnum[shape],
selfClass,
{'active:scale-105':isAnimated}
]"
@click.stop="onBtnClick"
>
...
</button>
<script>
// handle click event
const emits = defineEmits(['click'])
const onBtnClick=()=>{
// if lodading, return
if(props.loading){
return
}
emits('click');
}
</script>
Search组件中
<!--search button-->
<button-vue
class="absolute right-1"
size="large"
shape="circle"
icon="search"
:loading="true"
@click="Click"
>
Search
</button-vue>
<script>
// handle click
const Click=()=>{
console.log('click')
}
</script>
写回答
1回答
-
Sunday
2022-09-05
你好
按照你当前的代码逻辑,button 组件内部使用了 stop 禁止冒泡,并且通过 @ 监听了 click 事件,那么事件就会被拦截,通过 emits 发送出去,那么这个事件是不会被两次触发的。他只会被 emit 一次。
012022-09-06
相似问题