Uso de Slots para Inyección Dinámica de HTML en Componentes Vue
Clase 29 de 53 • Curso Profesional de Vue.js 2
Contenido del curso
- 3

Herramientas esenciales para desarrollar con BioJS y NodeJS
06:13 - 4

Creación de una Aplicación Vue.js con CLI y Webpack Simple
12:50 - 5

Configuración y uso de Webpack en proyectos JavaScript
10:38 - 6

Configuración y uso de Babel para compatibilidad JavaScript
05:06 - 7

Configuración de eSlimt con EstándarJS y Webpack
15:34 - 8

Integración de SaaS y Bulma en Aplicaciones Vue.js
06:18 - 9

Configuración de Pag para optimizar el workflow de desarrollo HTML
04:23 - 10
Diseño de Mockups: Práctica y Colaboración en Comunidad
00:20 - 11
Creación de Vistas con Mockups y Vue.js
00:32
- 12

Expresiones en Vue: Manipulación Dinámica del DOM
03:49 - 13

Directivas de Vue: Uso y Funciones Principales
06:22 - 14

Data Binding y Directivas en Vue: bmodel y bevined
04:11 - 15

Propiedades Computadas en JavaScript: Creación y Uso Práctico
04:13 - 16

Uso de Watchers en Biomóvil para Gestión de Cambios de Propiedades
02:25 - 17

Manipulación de Eventos y Métodos en Aplicaciones Web
06:12 - 18

Creación de Interfaz con Vue.js y Framework CSS Bulma
19:03 - 19
Manipulación del DOM con Vue.js: Práctica y Ejercicios
03:00
- 23

Creación y Registro de Componentes en Vue.js
08:46 - 24

Creación de Componentes en Vue.js con Bulma para Platzi Music
09:50 - 25

Reactividad y Virtual DOM en Vue.js: Conceptos y Soluciones
06:14 - 26

Ciclo de Vida de Componentes en Vue.js: Hooks y Ejecución de Código
05:38 - 27

Comunicación entre Componentes en Vue.js: Props y Eventos
23:27 - 28

Comunicación entre Componentes en Vue: Eventos de Hijo a Padre
12:04 - 29

Uso de Slots para Inyección Dinámica de HTML en Componentes Vue
13:42 - 30

Comunicación entre Componentes Vue con Event Bus y Plugins
19:19
- 39

Gestión de Estados Centralizados con la Librería BuX
03:41 - 40

Integración de VueX y arquitectura Flux en Vue.js
17:32 - 41

Mutaciones en Vuex: Gestión y Actualización del Estado Reactivo
08:16 - 42

Uso de Getters en Vuex para Acceso Personalizado de Estado
07:35 - 43

Acciones asincrónicas en Vuex: cómo implementarlas y utilizarlas
07:55 - 44

Integración de VueX y Babel en PlatziMusic
26:37
¿Qué son los slots en Vue.js?
Los slots son una funcionalidad poderosa en Vue.js que permite la inyección dinámica de contenido HTML desde un componente padre hacia un componente hijo. Al utilizar slots, se incrementa la flexibilidad en el diseño de componentes reutilizables y se simplifica la personalización del contenido a partir de los requisitos del componente padre.
¿Cómo se implementan los slots?
Para implementar slots en Vue.js, sigue estos pasos:
-
Definir el componente hijo: Crea un componente hijo donde se utilizarán los slots. Por ejemplo, en
childComponent.view. -
Insertar el slot en el componente hijo: Agrega el componente
<slot>dentro del HTML del componente hijo. Asigna nombres descriptivos a cada slot si planeas inyectar diferentes tipos de contenido.<template> <div> <slot name="title"> <!-- Contenido predeterminado --> </slot> <slot name="body"> <!-- Contenido predeterminado --> </slot> </div> </template> -
Inyectar contenido desde el componente padre: En el componente padre, especifica el contenido que deseas insertar en los slots definidos.
<template> <child-component> <template v-slot:title> <h1>Título personalizado</h1> </template> <template v-slot:body> <p>Contenido del cuerpo personalizado</p> </template> </child-component> </template>
¿Cuándo usar slots?
Los slots son adecuados en las siguientes situaciones:
- Componentes modales: Personaliza títulos, botones o cualquier otro contenido en ventanas emergentes.
- Notificaciones: Inyecta mensajes diferentes basados en las necesidades del aplicativo.
- Diseños complejos: Reemplaza contenido en layouts de manera específica y controlada.
¿Cómo manejar resultados condicionados con slots?
Para gestionar casos específicos como mostrar mensajes de error en notificaciones, se puede aplicar lógica condicional para mostrar un slot solo cuando ocurran eventos específicos, como resultados nulos en una búsqueda:
-
Configurar la lógica de control:
Define en el objeto
datadel componente una propiedad que controle la visibilidad del slot:data() { return { showNotification: false, }; } -
Condicionar la visibilidad:
Usa un
watcherpara detectar cambios y manejar el tiempo de visualización del mensaje:watch: { showNotification(newValue) { if (newValue) { setTimeout(() => { this.showNotification = false; }, 3000); } } }
Ejemplo práctico: notificaciones en Vue.js con Bulma
Vamos a implementar un ejemplo con Bulma para mostrar notificaciones amigables en la UI utilizando slots:
-
Crear el componente de notificación:
<template> <div class="container"> <div class="columns is-centered"> <div class="column is-5"> <div class="notification is-danger"> <slot name="body">Algo anduvo mal por defecto</slot> </div> </div> </div> </div> </template> -
Utilizar el componente en
App.view:Inyecta un mensaje desde el componente padre que solo aparecerá al no encontrar resultados en una búsqueda:
<template> <notification> <template v-slot:body> <p>No se encontraron resultados.</p> </template> </notification> </template> -
Configurar estilos CSS y comportamiento:
Usa clases de Bulma para estandarizar el diseño y agrega reglas en el CSS con
scopedpara evitar conflictos.<style scoped> .notification { margin: 10px; } </style>
Con esta implementación, se logra personalizar de manera eficiente los componentes con un diseño modular, facilitando la reutilización y el mantenimiento del código. Animate a seguir explorando y aplicando conceptos avanzados como los slots para mejorar tus proyectos en Vue.js.