🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### 一、Vue3.x Teleport、 Vue3.x中的组件模板属于该组件,有时候我们想把模板的内容移动到当前组件之外的DOM 中,这个时候就可以使用 Teleport。 表示teleport内包含的内容显示到body中 ~~~ <teleport to="body"> 内容 </teleport> ~~~ ~~~ <teleport to="#app"> 内容 </teleport> ~~~ ### 二、使用Teleport实现一个模态对话框的组件 **Modal.vue** ~~~ <template> <teleport to="body"> <div class="model-bg" v-show="visible"> <div class="modal-content"> <button class="close" @click="$emit('close-model')">X</button> <div class="model-title">{{title}}</div> <div class="model-body"> <slot> 第一个对话框 </slot> </div> </div> </div> </teleport> </template> <script> export default { props: ["title", "visible"] } </script> <style lang="scss"> .model-bg { background: #000; opacity: 0.7; width: 100%; height: 100%; position: absolute; top: 0px; } .modal-content { width: 600px; min-height: 300px; border: 1px solid #eee; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); background: #fff; .model-title { background: #eee; color: #000; height: 32px; line-height: 32px; text-align: center; } .model-body { padding: 40px; } .close { position: absolute; right: 10px; top: 5px; padding: 5px; border: none; cursor: pointer; } } </style> ~~~ Home.vue使用model ~~~ <template> <div class="home"> <button @click="isVisible=true">弹出一个模态对话框</button> <modal :visible="isVisible" title="用户登录" @close-model="isVisible=false"></modal> </div> </template> <script> import Modal from "./Modal" export default { data() { return { isVisible: false } }, components: { Modal } } </script> <style lang="scss"> .home { position: relative; } </style> ~~~