vue3自定义弹框组件,函数方式调用
在Vue 3中,可以创建一个自定义组件来实现弹框功能。以下是一个简单的自定义弹框组件的示例:
<template>
<div v-if="isVisible" class="modal">
<div class="modal-content">
<span class="close" @click="closeModal">×</span>
<slot></slot> <!-- 用来插入内容的插槽 -->
</div>
</div>
</template>
<script>
import { ref } from 'vue';
export default {
setup() {
const isVisible = ref(false);
// 显示弹框
function showModal() {
isVisible.value = true;
}
// 关闭弹框
function closeModal() {
isVisible.value = false;
}
return { isVisible, showModal, closeModal };
},
};
</script>
<style scoped>
.modal {
display: none; /* Hidden by default */
position: fixed; /* Stay in place */
z-index: 1; /* Sit on top */
left: 0;
top: 0;
width: 100%; /* Full width */
height: 100%; /* Full height */
overflow: auto; /* Enable scroll if needed */
background-color: rgb(0,0,0); /* Fallback color */
background-color: rgba(0,0,0,0.4); /* Black w/ opacity */
}
.modal-content {
background-color: #fefefe;
margin: 15% auto; /* 15% from the top and centered */
padding: 20px;
border: 1px solid #888;
width: 80%; /* Could be more or less, depending on screen size */
}
.close {
color: #aaa;
float: right;
font-size: 28px;
font-weight: bold;
}
.close:hover,
.close:focus {
color: black;
text-decoration: none;
cursor: pointer;
}
</style>
使用这个组件时,你可以这样做:
<template>
<div>
<modal-box ref="myModal">
<p>这是一个弹框内容示例。</p>
</modal-box>
<button @click="openModal">打开弹框</button>
</div>
</template>
<script>
import ModalBox from './components/ModalBox.vue';
export default {
components: {
ModalBox
},
setup() {
const myModal = ref(null);
function openModal() {
myModal.value.showModal();
}
return { myModal, openModal };
}
};
</script>
在上面的例子中,<modal-box>
是一个自定义的弹框组件,它有一个插槽来允许你插入内容。通过使用 ref
并引用组件的 showModal
方法,你可以从父组件中控制弹框的显示。
评论已关闭