Instalación de View Router paso a paso
Clase 32 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
09:50 min - 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
Aprende a instalar y configurar View Router paso a paso para construir una single page application funcional, ordenada y sin errores. Desde el comando de npm hasta el uso de router-view y el manejo de estados con v-if, aquí tienes un flujo claro y práctico basado en el código real.
¿Cómo instalar y habilitar view router en la app?
Para empezar, se usa una librería oficial mantenida por el mismo Core Team del framework. La documentación es completa y explica instalación y características. La integración requiere instalar la dependencia, crear las rutas y registrar el router en la instancia global de View.
- Instala la dependencia con npm.
- Crea un archivo de rutas y asocia path con componentes.
- Importa las rutas en main.js y registra el router.
- Pasa la instancia de router a la instancia principal.
Ejecuta la instalación:
npm i -S view en router
Define rutas en src/routes.js:
// src/routes.js
import Search from '@/components/Search.view'
const routes = [
{ path: '/', name: 'Search', component: Search }
]
export default routes
Registra el router en main.js:
// src/main.js
import View from 'view'
import ViewRouter from 'view en router'
import routes from '@/routes'
import App from './App.view'
View.use(ViewRouter)
const router = new ViewRouter({ routes })
new View({
router,
render: h => h(App)
}).$mount('#app')
Claves del setup:
- Importar dependencias sin ./ ni @/ indica que vienen de npm.
- Declarar un array de rutas y exportarlo por defecto.
- Asociar path y component; opcionalmente usar name para navegación programática.
¿Qué refactor del app mejora la arquitectura con rutas?
El objetivo es que el componente principal quede mínimo y estructural, delegando la lógica a componentes de página. Se crea un componente Search y se mueve allí el contenido que no pertenece al esqueleto global.
- Duplica App.view como Components/Search.view.
- En Search.view: usa
, elimina header, footer e imports extra. - Quita el import del CSS global de Search.view.
- En App.view: deja solo estructura base, sin lógica, con header y footer.
- Inserta router-view entre header y footer para el contenido dinámico.
App.view minimal con router-view:
<template>
<div id="app">
<PMHeader />
<router-view />
<PMFooter />
</div>
</template>
<script>
import PMHeader from '@/components/PMHeader.view'
import PMFooter from '@/components/PMFooter.view'
export default { components: { PMHeader, PMFooter } }
</script>
Beneficios del refactor:
- Separación de responsabilidades: App.view gestiona la estructura; Search.view gestiona la página.
- Escalabilidad: cada ruta tendrá su componente dedicado.
- Mantenibilidad: menos acoplamiento entre el router y la UI.
¿Cómo resolver errores comunes del player con directivas v-if?
En la consola surgió un error: intentar leer la propiedad images de algo undefined al cargar el Player sin una canción seleccionada. El componente accedía a track.album.images cuando aún no existía track. Solución: renderizado condicional con v-if para evitar acceder a datos inexistentes.
- Usa v-if para esperar a que track exista.
- Verifica también que track.album tenga valor.
- Así evitas lecturas de propiedades sobre undefined.
Ejemplo en Player.view:
<template>
<section v-if="track && track.album">
<img :src="track.album.images[0]" alt="cover" />
<!-- resto del player -->
</section>
</template>
<script>
export default {
props: { track: Object }
}
</script>
Buenas prácticas señaladas:
- En objetos de configuración, separa propiedades con coma para evitar errores de compilación.
- Mantén fuera del DOM los componentes que dependen de datos aún no cargados.
- Comprueba en la console y corrige antes de continuar.
Con esto, el Search Component se renderiza, se pueden buscar canciones, reproducirlas y no aparecen errores al iniciar. Próximo paso natural: rutas programáticas y parametrizables para flujos más avanzados.
¿Tienes dudas o una mejora que sumar? Comparte en comentarios qué parte del flujo te gustaría profundizar: instalación, refactor o manejo de estados con v-if.