帮我写一个 vue 弹窗组件
时间: 2023-07-01 18:21:51 浏览: 111
vue+iview写个弹框的示例代码
好的,以下是一个基本的 Vue 弹窗组件:
```
<template>
<div class="modal" v-if="show">
<div class="modal-overlay" @click="close"></div>
<div class="modal-container">
<div class="modal-header">
<slot name="header"></slot>
<button class="modal-close" @click="close">×</button>
</div>
<div class="modal-body">
<slot></slot>
</div>
<div class="modal-footer">
<slot name="footer"></slot>
</div>
</div>
</div>
</template>
<script>
export default {
props: {
show: {
type: Boolean,
default: false
}
},
methods: {
close() {
this.$emit('close');
}
}
}
</script>
<style>
.modal {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
display: flex;
justify-content: center;
align-items: center;
}
.modal-overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.modal-container {
background-color: #fff;
width: 500px;
max-width: 100%;
border-radius: 4px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
overflow: hidden;
}
.modal-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 16px;
border-bottom: 1px solid #ccc;
}
.modal-close {
font-size: 24px;
font-weight: bold;
color: #ccc;
background-color: transparent;
border: none;
cursor: pointer;
outline: none;
}
.modal-body {
padding: 16px;
}
.modal-footer {
display: flex;
justify-content: flex-end;
align-items: center;
padding: 16px;
border-top: 1px solid #ccc;
}
</style>
```
这个组件包含了一个遮罩层、一个弹窗容器和三个插槽(header、body、footer),可以用于显示不同的内容,比如提示信息、表单、图片等。你可以根据自己的需要进行修改和扩展。在父组件中可以通过 v-modal 指令来控制弹窗的显示和隐藏:
```
<template>
<div>
<button @click="showModal = true">打开弹窗</button>
<modal :show="showModal" @close="showModal = false">
<template v-slot:header>
<h2>标题</h2>
</template>
<template v-slot:body>
<p>内容</p>
</template>
<template v-slot:footer>
<button @click="showModal = false">关闭弹窗</button>
</template>
</modal>
</div>
</template>
<script>
import Modal from './Modal.vue';
export default {
components: {
Modal
},
data() {
return {
showModal: false
}
}
}
</script>
```
这个例子中,当点击按钮时,会将 showModal 属性设置为 true,弹出弹窗。当点击弹窗的关闭按钮或遮罩层时,会将 showModal 属性设置为 false,关闭弹窗。
阅读全文