Slots Vue Js

 

Vue implements a content distribution API that’s modeled after the current Web Components spec draft, using the element to serve as distribution outlets for content. This allows you to compose components like this.

Slots allow you to embed arbitrary content in a Vue component. Slots are the Vue equivalent to transclusion in Angular and child props in React.

  • The slot and slot-scope attributes will continue to be supported in all future 2.x releases, but are officially deprecated and will eventually be removed in Vue 3. Named Slots with the slot Attribute. Deprecated in 2.6.0+. See here for the new, recommended syntax.
  • When scoped slots were first introduced to Vue.js I found them quite challenging to fully understand, not so much the syntax but mostly around when and why I would use them.
  • In this course, you'll learn how to use slots and scoped slots to create flexible and reusable Vue.js components. Slots allow us to pass components and HTML to components, giving us greater control of the appearance than what we get with props.

For example, suppose you wanted a component called green that added a green background behind child content. Here's an example of such a component using slots.

You can also define default inner HTML. If there's no inner HTML underneath <green></green>, Vue will use the inner HTML of <slot></slot> as shown below.

Slots Vue Js Login

Named Slots

Sometimes you need multiple slots. For example, suppose you're writing a brand component that has two slots, 'name' and 'logo'.

The output HTML looks like this:

Here's the rendered HTML:

Vue School has some of our favorite Vue video courses. Their Vue.js Master Class walks you through building a real world application, and does a great job of teaching you how to integrate Vue with Firebase. Check it out!

More Vue Tutorials

In this article, we will get a full understanding of the vue slots through the practical application of its various use cases. Lets start with know about vuejs slots first.

What is Vue Slot?

Slots are reserved space offered by vuejs to display content passed down from one component to another. There are two types of the slot in vuejs namely: named slot and unnamed(default) slot.

Looking for Vue Templates?

  • Try our Vue Templates and create stunning web applications for unlimited client projects and personal projects.
  • Start building web applications and products using our Free Vuejs Templates without any investment.
Vue

Practical Use Case of Vue Slots

  • To pass down Html elements from one component to another.

With props, Vue allows us to pass strings, objects, arrays, and functions from a parent component to its child component. While it is possible for us to pass HTML elements from a parent to its child component as a string this will make our website vulnerable to cross-site scripting attack that is why vuejs provides us with a slot which is a more secure and reliable method of passing HTML element and other contents from parent to its child component for rendering.

HOW TO USE SLOT In the child component where the content is to be displayed, add the slot tag as follows:

In this tutorial, we will generate our project with the Vue CLI

vue create slot-project

In the src folder create a components folder with parent.vue andchild.vue files

Slots Vue Js

Adding the code below to child.vue

Add the code snippet below to parent.vue

Add the code snippet below to parent.vue

Here we imported the child component and pass down the HTML content to the child.

For these contents to be displayed in the child component, theslot tag must be added to the child component.

Lets add the slot tag to the child.vue file as follow:

In the app.js file add the parent.vue component

Now, we can verify that slot is working as expected.

Now our app should be like:

Vue Scoped Slots

STYLING SLOT COMPONENT

For styling our slot component, the CSS styles should be added to the component with the slot tag.

Vue.js

So in child.vue component we will add the following styles to the HTML content received from the parent.vue component.

Using Multiple Slots

In order to use multiple slots in vue, vuejs provides us with away to name our slots.

What if we want the h2 and h3 tags in the parent component to be displayed individually in separate slots. This would be a typical use case for named slots.

In the Parent.vue component we will name our slots as follows:

Slots vue js app

Slot Vue Js

In the child.vue component we will receive the named slot as follows:

Vue Slot Examples

Here vuejs reserves two slots to display the content of the slotattribute with the value of message and name as separate contents.

Conclusion

Vue Component Slot

In this article, we have seen a practical use case of slots to transfer content from a parent component to a child component.

Vue Js Named Slots

For more information on the slot, check out the Vue documentation.