Componentes Layout en Vue con Bulma

Clase 24 de 53Curso Profesional de Vue.js 2

Resumen

Mejora la arquitectura de Platzi Music creando componentes claros y reutilizables. Aquí verás cómo ordenar la carpeta components, usar Bulma para dar estilo, registrar componentes con instalación local y evitar el error de “un solo root”. Además, aplicarás el prefijo PM para identificar componentes custom y buenas prácticas de indentación.

¿Cómo organizar la carpeta components y layout?

Organiza el proyecto para escalar sin complicaciones. La recomendación es poner todos los componentes en una carpeta components y mantener el archivo principal app punto view fuera de esa carpeta. Dentro de components, crea la subcarpeta Layout para elementos estructurales como header, footer o container.

  • Crear carpeta components y subcarpeta Layout.
  • Mantener app punto view fuera de components.
  • Colocar en Layout los componentes de estructura: header, footer, container.
  • Seguir la regla de “un archivo, un componente”.

Estructura de archivos:

Components/ Layout/ footer.view header.view App.view

¿Cómo crear e inyectar un footer con Bulma?

El footer solo necesita HTML, por lo que puedes omitir script y style. Usa Bulma para estilos rápidos. En el template, elige el lenguaje pack y crea la estructura con clases para centrar contenido y mostrar un mensaje.

  • Usar footer con la clase footer de Bulma.
  • Añadir un container y un content centrado (clase has text center).
  • Escribir un párrafo con un mensaje, por ejemplo, con emojis.

Ejemplo de footer punto view:

<template lang="pack"> footer.footer .container .content p Code with ❤️ — @tu_usuario </template>

Instalación local en app punto view con prefijo PM. Esto limita el uso del componente a donde realmente se necesita.

  • Prefijo PM para indicar componente del proyecto.
  • Importar desde Components/Layout/footer.view.
  • Registrar en la property components.
  • Usar la etiqueta en el template. Recuerda: view convierte PascalCase a “cubic case”.

Ejemplo de registro y uso local:

<script> import PMFooter from 'Components/Layout/footer.view' export default { components: { PMFooter } } </script> <template> section // ...contenido pm-footer </template>

¿Qué hacer si aparece el error de un solo root?

Si el template tiene dos elementos padre, verás el error: “el template debe tener exactamente un solo componente root”.

  • Causa: pm-footer al mismo nivel que app o section.
  • Solución: anidar pm-footer dentro del único root del template.
  • Verificar indentación para asegurar un solo componente padre.

¿Cómo construir el header con hero y navegación?

Crea header punto view con la misma base: un archivo, un componente, sin script ni style por ahora, y lang en pack. Puedes combinar HTML y pack sin problema: webpack lo resuelve.

  • Usar secciones de Bulma: hero e is success para color.
  • Crear hero head con nav, container y nav left para el título.
  • Añadir un nav item con el nombre Platzi Music y un emoji de radio en strong.
  • Crear nav right con la clase nav menu para opciones futuras.
  • Agregar hero body con container y center para centrar.
  • Incluir title y subtitle, por ejemplo: “Platzi Music” y “Canciones que están buenísimas”.

Ejemplo de header punto view:

<template lang="pack"> .hero.is-success .hero-head .nav .container .nav-left .nav-item strong 📻 Platzi Music .nav-right.nav-menu // vacío por ahora .hero-body .container.center .title Platzi Music .subtitle Canciones que están buenísimas </template>

Registra e inyecta el header igual que el footer, y colócalo arriba del section en app punto view.

  • Importar PMHeader desde Components/Layout/header.view.
  • Registrar en components.
  • Añadir la etiqueta pm-header sobre section.
  • Recordar que hasta escribir el tag en template no forma parte del DOM.

¿Cómo corregir indentación, tabs y espacios?

Revisa la indentación antes de inyectar. Mezclar tabs y espacios puede causar errores de compilación de pad. Además, nav left y nav right deben estar al mismo nivel.

  • No mezclar tabs y espacios.
  • Alinear nodos hermanos al mismo nivel.
  • Minimizar y revisar bloques para detectar desalineaciones.

Ideas clave que aplicaste:

  • Instalación local vs global: usar local cuando el componente solo vive en un lugar.
  • Prefijos de componentes: PM para identificar componentes del proyecto frente a terceros o elementos HTML.
  • Conversión de nombres: view pasa de PascalCase a “cubic case” al usar etiquetas.
  • Un único root: cada template debe tener un solo componente padre.
  • Containers y grid: con Bulma y el grid system de Flexbox centras y adaptas el contenido a distintos dispositivos.

¿Te quedó alguna duda o tienes otra forma de organizar Layout y prefijos PM? Cuéntalo en los comentarios y enriquezcamos la práctica entre todos.

      Componentes Layout en Vue con Bulma