vue.js - 防止子元素接收点击事件不起作用
问题描述
我正在尝试制作一个模态组件并在我单击组件外部时将其关闭。这是我当前的设置:
- 在元素上设置了单击事件的Auth
div
组件:
<template> <div>
<transition name="modal">
<div class="modal-mask" @click="$parent.$emit('close')">
<div class="modal-wrapper">
<div class="modal-container">
<div class="modal-header">
<slot name="header">Default Header</slot>
</div>
<div class="model-body">
<slot name="body">Default Body</slot>
</div>
<div class="modal-footer">
<slot name="footer">Default Footer</slot>
</div>
</div>
</div>
</div>
</transition> </div> </template>
- 注入必要信息的SignIn组件:
<template>
<div>
<Auth />
</div>
</template>
- 使用 SignIn 组件的Home组件:
<template>
<div class="home">
<SignIn v-if="showModal" @close="showModal = false" />
</div>
</template>
现在,当我在模式外部单击时,它的行为正常,close
事件被调用。
但是当我在模态框内单击时也会调用它。
不是我尝试使用@click.self
,但现在即使在模态之外单击它也不再起作用。
<div class="modal-mask" @click.self="$parent.$emit('close')">
我目前正在学习VueJs,但我不明白它是如何工作的。我认为self
会阻止将点击事件传播到子元素,仅此而已。
任何人都知道发生了什么?
PS:我正在使用此设置,因为我想使用 Auth 组件进行登录和注册。
解决方案
要么<div class="modal-wrapper">
要么<div class="modal-container">
需要@click.prevent.stop
<template>
<div>
<transition name="modal">
<div class="modal-mask" @click="$parent.$emit('close')">
<div class="modal-wrapper">
<div class="modal-container" @click.prevent.stop>
<div class="modal-header">
<slot name="header">Default Header</slot>
</div>
<div class="model-body">
<slot name="body">Default Body</slot>
</div>
<div class="modal-footer">
<slot name="footer">Default Footer</slot>
</div>
</div>
</div>
</div>
</transition>
</div>
</template>
推荐阅读
- ads - 如何使用 google DFP / Ad Manager 设置皮肤接管广告
- java - REPLACE INTO 不影响任何行
- java - pom.xml中添加openfeign依赖导致spring微服务构建失败
- jira-rest-api - 获取 JIRA 版本下的所有问题
- scala - how to reference a specific function where two functions in scope have the same name
- arrays - “无法将 Array{Float64,2} 类型的对象“转换”为 Array{Float64,13} 类型的对象
- stringtemplate - 如何在 JAVA 中通过 stringtemplate v4 中的 jsonarray 进行迭代?
- angular - 将函数从 RxJS v5.x 转换为 v6
- ios - 为什么只有第一个任务退出后才调用 dispatchGroup.notify?
- java - 如何实现 MVP 被动视图?