一、定义Teleport
<template>
<teleport to="#modal">
<div id="center" v-if="isOpen">
<h2>
<slot>This is a modal</slot>
</h2>
<button @click="handleClick">关闭</button>
</div>
</teleport>
</template>
<script>
import { defineComponent } from "vue";
export default defineComponent({
props: {
isOpen: {
type: Boolean,
default: true,
},
},
emits: {
"close-modal": null,
},
setup(props, context) {
const handleClick = () => {
context.emit("closeModal");
};
return {
handleClick,
};
},
});
</script>
二、父组件接收事件
<template>
<Modal :isOpen="isShow" @closeModal="handleModal"></Modal>
<div>About</div>
</template>
<script setup>
import { reactive, toRefs } from '@vue/reactivity'
import Modal from './Children/Modal.vue'
const state = reactive({
isShow:true,
handleModal(){
state.isShow = false
}
})
const {isShow,handleModal} = toRefs(state);
</script>