基本使用
teleport 可以将包裹的内容移动到另外的dom元素下
属性:
to:类型Stirng,必须是有效的查询选择器(#some-id .some-class之类)或 HTMLElement(this.$refs.XX)
disabled:类型boolean,启用和禁用转移功能
改变disabled,这将移动实际的 DOM 节点,而不是被销毁和重新创建,并且它还将保持任何组件实例的活动状态。所有有状态的 HTML 元素 (即播放的视频) 都将保持其状态
teleport包裹的子组件虽然被转移到了不同地方 ,但是依旧是当前组件的子级,可以当作正在子组件使用,props也依旧生效。
<template>
<div id="f">
<teleport to="body" :disabled="disabled">
<modal :msg="msg"></modal>
</teleport>
</div>
</template>
<script>
import Modal from "./Modal.vue";
export default {
components: { Modal },
data() {
return {
msg: "父组件信息",
disabled: true,
};
},
mounted() {
setInterval(() => {
this.disabled = !this.disabled;
}, 1000);
},
};
</script>
// Moda.vue
<template>
<div>{{ msg }}</div>
</template>
<script>
export default {
props: {
msg: String,
},
};
</script>
在同一目标上使用多个 teleport
多个 <teleport> 组件可以将其内容挂载到同一个目标元素。顺序将是一个简单的追加——稍后挂载将位于目标元素中较早的挂载之后
<teleport to="#modals">
<div>A</div>
</teleport>
<teleport to="#modals">
<div>B</div>
</teleport>
<!-- result-->
<div id="modals">
<div>A</div>
<div>B</div>
</div>