Slots en VueJS: la guía completa para compartir contenido

Slots en VueJS: la guía completa para compartir contenido

Bienvenido a nuestra guía completa sobre los slots de VueJS. VueJS es un framework JavaScript muy extendido para crear aplicaciones web. Trae un buen número de funcionalidades que hacen el desarrollo más cómodo y más eficaz, y los slots son una de ellas.

Los slots son una forma potente de compartir contenido entre componentes. Permiten reutilizar trozos de HTML sin esfuerzo e insertarlos en otras partes de la aplicación.

¿Qué es un slot?

Un slot es un elemento especial de un componente VueJS que define un hueco donde se puede inyectar contenido externo. Resulta práctico cuando quieres reutilizar un componente en distintas partes de tu aplicación, pero con contenidos diferentes.

Por ejemplo, imagina un componente que muestra un botón. Si quieres usarlo en varias partes de la aplicación con textos de botón distintos, un slot te permite inyectar ese contenido concreto en cada uso.

¿Cómo se usan los slots?

Para usar los slots, lo primero es declarar uno en el componente principal. La sintaxis es esta:

javascript
<template>
  <div>
    <slot></slot>
  </div>
</template>

Después puedes usar ese componente inyectando contenido en el slot declarado:

javascript
<my-component>
  <p>Contenu injecté</p>
</my-component>

El contenido inyectado se mostrará en el lugar del slot dentro del componente principal.

Tipos de slots

Existen varios tipos de slots que puedes usar según lo que necesites:

Slot por defecto

Es el que se usa si no se indica ningún otro slot. Se declara simplemente con la sintaxis <slot></slot>.

javascript
<template>
  <div>
    <slot></slot>
  </div>
</template>

Slot con nombre

Permite declarar varios slots en un mismo componente y usarlos indicando su nombre. Por ejemplo:

javascript
<template>
  <div>
    <slot name="header"></slot>
    <slot name="footer"></slot>
  </div>
</template>

Scoped slot

Este slot permite inyectar contenido con un ámbito propio. Se declara con esta sintaxis:

javascript
<template>
  <div>
    <slot v-bind:text="textProp"></slot>
  </div>
</template>

<script>
export default {
  data() {
    return {
      textProp: 'Texte par défaut'
    }
  }
}
</script>

Cuando usas el componente con un scoped slot, también puedes pasar propiedades a través del slot:

javascript
<my-component>
  <template v-slot:default="slotProps">
    {{ slotProps.text }}
  </template>
</my-component>

Casos de uso habituales de los slots

Los slots resultan muy útiles en muchas situaciones, por ejemplo:

  • Reutilizar componentes con contenidos distintos.
  • Personalizar componentes con estilos y comportamientos concretos.
  • Crear temas para los componentes, lo que da flexibilidad de uso en distintas partes de la aplicación.

Conclusión

Los slots son una funcionalidad potente de VueJS que permite compartir contenido entre componentes de forma flexible y eficaz. Hay distintos tipos de slots para cubrir distintas necesidades, y sirven en muchos escenarios diferentes.

Esperamos que esta guía detallada sobre los slots de VueJS te haya resultado útil y te haya dejado clara su manera de funcionar y de usarse.

JavaScriptVue.js

Damien Flandrin Desarrollador web desde 2010, creador de Gekkode y de Email Impact. Cada artículo se prueba en un proyecto real antes de publicarse. Contacto
Newsletter

Las nuevas pruebas, tutoriales y proyectos, por correo.

Pruebas reproducibles, código versionado, resultados fechados. Nunca spam.