【发布时间】:2020-03-29 14:29:53
【问题描述】:
我正在尝试制作一个模态组件并在我单击组件外部时将其关闭。这是我当前的设置:
-
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>
- Home 使用 SignIn 组件的组件:
<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 组件进行登录和注册。
【问题讨论】:
-
您尝试过在模态包装器上使用@click.stop 吗?
-
是的,当点击外部和内部模态时,停止它会消失。
标签: vue.js