Componentes Layout en Vue con Bulma
Clase 24 de 53 • Curso Profesional de Vue.js 2
Contenido del curso
CLI y Dev Tools
- 3

Instalación de Vue.js: Node, Dev Tools y CLI
06:13 min - 4

Crear una aplicación Vue con CLI y webpack
12:49 min - 5

Cómo funciona webpack.config.js
10:38 min - 6

Babel: transpilador de JavaScript moderno
05:06 min - 7

ESLint con Standard JS: linteo automático en webpack
15:34 min - 8

Configuración de Sass y Bulma en Vue
06:18 min - 9

Cómo configurar Pug en Vue con webpack
04:23 min - 10
Diseño de Mockups: Práctica y Colaboración en Comunidad
00:20 min - 11
Creación de Vistas con Mockups y Vue.js
00:32 min
Manipulación del DOM
- 12

Expresiones en Vue: sintaxis doble llave
03:49 min - 13

Diferencia entre v-show y v-if en el DOM
06:22 min - 14

Qué es data binding en Vue.js
04:11 min - 15

Computed properties en Vue.js: cómo crearlas
04:13 min - 16

Qué son los watchers de Vue
02:25 min - 17

Eventos Vue: directiva v-on y métodos format
06:12 min - 18

Cómo construir una interfaz de búsqueda completa en Vue
19:03 min - 19
Manipulación del DOM con Vue.js: Práctica y Ejercicios
03:00 min
REST y HTTP
Sistema de Componentes
- 23

Cómo crear componentes en Vue
08:46 min - 24

Componentes Layout en Vue con Bulma
Viendo ahora - 25

Reactividad en Vue: $set y Object.assign
06:14 min - 26

Hooks del ciclo de vida en Vue.js
05:38 min - 27

Comunicación padre-hijo con props en Vue
23:27 min - 28

Eventos en Vue: comunicar hijo a padre
12:04 min - 29

Slots: HTML dinámico en componentes Vue
13:42 min - 30

Plugin Event Bus: comunicar componentes sin relación en Vue
19:19 min
Vue Router
Extendiendo VueJS
Clases, Animaciones y Transiciones36
Vuex
- 39

Cómo Vuex centraliza estados en Vue
03:41 min - 40

Instalación de Vuex con estado único
17:32 min - 41

Cómo usar mutations y commit en Vuex
08:16 min - 42

Getters de Vuex: mapGetters y store sincronizado
07:35 min - 43

Cómo dispatch ejecuta actions asincrónicas en ViewX
07:54 min - 44

Instalación de Viewex en Platzi Music
26:37 min
Nuxt.js
Deploy a Producción con Now
Conclusiones
Bonus
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.