·
1 min read

Vue Tip: Passing Slots to Child Components

MH

Michael Hoffmann

@mokkapps

Vue Tip: Passing Slots to Child Components Image

In certain scenarios, you want to pass on all slots from a parent component to the child component. This is especially useful when creating a wrapper component that adds some functionality to the child component.

In this article, let's assume we have a Child.vue component with two named slots, top and bottom:

Child.vue
<template>
  <div>
    <h2>Child</h2>
    <slot name="top" />
    <slot name="bottom" />
  </div>
</template>

Child.vue is wrapped by the Parent.vue component that should pass all slots to its child component. First, let's see how the named slots are filled in the App.vue component:

App.vue
<template>
  <Parent>
    <template #top>
      <span>Top</span>
    </template>
    <template #bottom>
      <span>Bottom</span>
    </template>
  </Parent>
</template>

Finally, let's see how the Parent.vue component passes all slots to its child component:

Parent.vue
<template>
  <div>
    <h1>Parent</h1>
    <Child>
      <template v-for="(_, slotName) in $slots" #[slotName]>
        <slot :name="slotName" />
      </template>
    </Child>
  </div>
</template>

We iterate over the $slots object and render a slot element for each slot. The slot element has a :name attribute that is bound to the slotName variable.

StackBlitz

Try it out on StackBlitz:

If you liked this Vue tip, follow me on BlueSky to get notified about new tips, blog posts, and more. Alternatively (or additionally), you can subscribe to my weekly Vue & Nuxt newsletter :

I will never share any of your personal data. You can unsubscribe at any time.