Using the built-in <Teleport>
component to move a <div>
element to the root of the <body>
:
<Teleport to="body">
<div id="redDiv">Hello!</div>
</Teleport>
Run Example »
See more examples below.
The built-in <Teleport>
component is used with the to
prop to move an element out of the current HTML structure and into another element already mounted in the DOM.
To see that an element actually has been moved somewhere with the <Teleport>
component, you might need to right-click and inspect the page.
A teleported element will end up after other elements that are already mounted in the destination. So in case more than one element is teleported to the same destination, the last element teleported will end up below other teleported elements.
If <Teleport>
is used to move a component, the communication to and from that component with provide/inject or prop/emit still works like before, as if the component was not moved.
Also, if some content is moved out of a component with <Teleport>
, Vue makes sure that relevant code inside the component in the <script>
and <style>
tags still works for the moved content. See the example below.
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 » |
Relevant code from the <style>
and <script>
tags still works for the teleported <div>
tag even though it is no longer inside the component after compilation.
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>
Run Example »
The boolean disabled
prop is toggled with a button so that the <div>
element is either teleported, or not.
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>
Run Example »
Vue Tutorial: Vue Teleport
截取页面反馈部分,让我们更快修复内容!也可以直接跳过填写反馈内容!