Vue <template> Element


Example

Using the built-in <template> element to toggle a section of HTML code with the v-if directive.

<ul>
  <li>Trolltunga</li>
  <template v-if="display">
    <li>Potato Point</li>
    <li>The souks of Marrakech</li>
    <li>Dry Tortugas</li>
    <li>Halong Bay</li>
  </template>
  <li>...</li>
</ul>
Run Example »

Definition and Usage

The HTML <template> tag becomes a built-in Vue <template> element when used with Vue directives v-if, v-else-if, v-else, v-for, or v-slot.

When used with v-if, v-else-if, v-else, or v-for, the built-in <template> element renders a section of HTML code.

When used with v-slot, the built-in <template> element directs a section of HTML code to a specified slot. See Example 1 below.

The built-in <template> element itself is not rendered as a DOM element.

Note: The top-level <template> element is a structural requirement when using SFCs (*.vue) files. For such top-level <template> elements, Vue directives cannot be used.


More examples

Example 1

Using the built-in <template> element to encapsulate more than one element and send them to a specific named slot with the v-slot directive.

<template>
  <h1>App.vue</h1>
  <p>The component has two div tags with one slot in each.</p>
  <slot-comp>
    <template v-slot:bottomSlot>
      <h4>To the bottom slot!</h4>
      <p>This p tag and the h4 tag above are directed to the bottom slot with the v-slot directive used on the template tag.</p>
    </template>
    <p>This goes into the default slot</p>
  </slot-comp>
</template>
Run Example »

Example 2

Using the <template> element, more than one element can be rendered with the v-if directive.

<div id="app">
  <template v-if="text.includes('pizza')">
    <p>The text includes the word 'pizza'</p>
    <img src="img_pizza.svg">
  </template>
  <p v-else>The word 'pizza' is not found in the text</p>
</div>

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
  const app = Vue.createApp({
    data() {
      return {
        text: 'I like taco, pizza, Thai beef salad, pho soup and tagine.'
      }
    }
  })
  app.mount('#app')
</script>
Try it Yourself »

Related Pages

Vue Tutorial: Vue v-slot

Vue Tutorial: Vue Templates

Vue Tutorial: Vue v-if Directive

Vue Reference: Vue v-if Directive

Vue Reference: Vue v-slot Directive

HTML Reference: HTML <template> tag


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