Los slots son una forma clara y flexible de inyectar HTML dinámico desde el componente padre hacia el hijo, evitando sobrecargar con propiedades y lógica. Aquí verás cómo crear slots con nombre, cómo el contenido del padre tiene precedencia y cómo aplicarlo en una notificación que se muestra solo cuando no hay resultados en la API y se cierra automáticamente con watchers y setTimeout de JavaScript.
¿Qué es un slot y para qué sirve?
Un slot permite que un componente hijo defina áreas “vacías” que el padre puede rellenar con su propio HTML. Si el padre no provee contenido, el hijo puede mostrar un contenido por defecto. Esto es útil para títulos y cuerpos personalizados, y para componentes como modales con botones y textos variables.
¿Cómo se define un slot con nombre?
En el hijo se declaran slots con nombre para secciones específicas como “title” y “body”. Si el padre no los rellena, se muestran valores por defecto.
<!-- child-component --><divclass="container"><slotname="title"><h1>Título por defecto</h1></slot><slotname="body"><p>Cuerpo por defecto.</p></slot></div>
¿Cómo lo reemplaza el componente padre?
El padre inyecta HTML usando el atributo slot con el nombre correspondiente. El contenido del padre tiene precedencia sobre el del hijo.
<!-- app.view --><child-component><h1slot="title">título desde el padre</h1><divslot="body"><p>Lorem ipsum.</p><p>Otro párrafo.</p></div></child-component>
¿Cómo aplicar slots en una notificación con Bulma?
Se crea un componente de notificación con estructura Bulma, un slot “body” con texto por defecto y estilos en SCSS con alcance limitado.
<!-- app.view --><pm-notificationv-show="showNotification"><pslot="body">no se encontraron resultados.</p></pm-notification>
¿Cómo mostrarlo solo cuando no hay resultados en la API?
Se define un booleano en data y se actualiza tras la búsqueda. Se usa comparación estricta en JavaScript.
// app.viewexportdefault{data(){return{showNotification:false};},methods:{asyncsearch(){const res =awaitthis.fetchTracks();// total de resultados en res.tracks.totalthis.showNotification= res.tracks.total===0;// estricto: ===}}};
Variable booleana: showNotification en false al iniciar.
Visibilidad con directiva: v-show en el componente de notificación.
Decisión por datos: res.tracks.total === 0.
¿Cómo cerrarlo automáticamente con un watcher y setTimeout?
Un watcher observa showNotification y, si es true, programa su ocultamiento a los 3 segundos.