teleport: 是一个内置组件,它可以将一个组件内部的一部分模板“传送”到该组件的 DOM 结构外层的位置去。
一、teleport应用场景
一个组件模板的一部分在逻辑上从属于该组件,但从整个应用视图的角度来看,它在 DOM 中应该被渲染在整个 Vue 应用外部的其他地方,最常见的例子就是全屏的模态框。
二、模态框弹窗组件
新建ModalButton.vue组件
1 2 3 4 5 6 7 8 9 10 11 12 13
| <template> <div> <button @click="modalOpen = true">弹出窗口</button> <teleport to='body'> <div v-if="modalOpen" class="modal"> <div>我是弹窗 父元素为body <button @click="modalOpen=false">关闭窗口</button> </div> </div> </teleport> </div> </template>
|
1 2 3 4 5 6 7 8
| export default { data() { return { modalOpen:true } }, }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| .modal{ position: absolute; top: 0; left:0; right:0; bottom: 0; background-color: rgba(0,0,0,0.5); display: flex; flex-direction: column; align-items: center; justify-content: center; } .modal div{ display: flex; flex-direction: column; align-items: center; justify-content: center; background-color: #fff; width: 300px; height: 300px; padding: 5px; }
|
1
| <ModalButton></ModalButton>
|
1 2 3 4 5
| import ModalButton from "./ModalButton.vue"; components:{ ModalButton },
|
当弹窗显示的时候,审查元素.modal与#app位于body下的同一层级