Vue <Teleport> Component


Example

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.


Definition and Usage

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.


Props

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 »

More Examples

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 »

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 »

Related Pages

Vue Tutorial: Vue Teleport


Copyright 1999-2023 by Refsnes Data. All Rights Reserved.