使用内置的<Teleport>
移动组件<div>
元素到根<body>
:
<Teleport to="body">
<div id="redDiv">Hello!</div>
</Teleport>
运行示例 »
请参阅下面的更多示例。
内置的<Teleport>
组件与使用to
prop 将元素移出当前 HTML 结构并移至已安装在 DOM 中的另一个元素中。
看到一个元素实际上已经被移动到某个地方了<Teleport>
组件,您可能需要右键单击并检查页面。
传送的元素将在已安装在目的地的其他元素之后结束。因此,如果多个元素被传送到同一目的地,则最后一个被传送的元素将最终位于其他被传送的元素下方。
如果<Teleport>
用于移动组件,通过提供/注入或道具/发射与该组件之间的通信仍然像以前一样工作,就好像组件没有被移动一样。
另外,如果某些内容被移出组件<Teleport>
,Vue 确保组件内的相关代码在<script>
和<style>
标签仍然适用于移动的内容。请参阅下面的示例。
Prop | Description | |
---|---|---|
to | Required. String. Specify the name of the target | Run Example » |
disabled | Optional. Boolean. Specify if the teleport functionality should be disabled | Run Example » |
相关代码来自<style>
和<script>
标签仍然适用于传送<div>
标签,即使它在编译后不再位于组件内部。
CompOne.vue
:
<template>
<div>
<h2>Component</h2>
<p>This is the inside of the component.</p>
<Teleport to="body">
<div
id="redDiv"
@click="toggleVal = !toggleVal"
:style="{ backgroundColor: bgColor }"
>
Hello!<br>
Click me!
</div>
</Teleport>
</div>
</template>
<script>
export default {
data() {
return {
toggleVal: true
}
},
computed: {
bgColor() {
if (this.toggleVal) {
return 'lightpink'
}
else {
return 'lightgreen'
}
}
}
}
</script>
<style scoped>
#redDiv {
margin: 10px;
padding: 10px;
display: inline-block;
}
#redDiv:hover {
cursor: pointer;
}
</style>
运行示例 »
布尔值disabled
道具通过按钮切换,以便<div>
元素要么被传送,要么不被传送。
CompOne.vue
:
<template>
<div>
<h2>Component</h2>
<p>This is the inside of the component.</p>
<button @click="teleportOn = !teleportOn">Teleport on/off</button>
<Teleport to="body" :disabled="teleportOn">
<div id="redDiv">Hello!</div>
</Teleport>
</div>
</template>
<script>
export default {
data() {
return {
teleportOn: true
}
}
}
</script>
<style scoped>
#redDiv {
background-color: lightcoral;
margin: 10px;
padding: 10px;
width: 100px;
}
</style>
运行示例 »
Vue教程:Vue 传送
截取页面反馈部分,让我们更快修复内容!也可以直接跳过填写反馈内容!