<target-language> Spanish </target-language> Navegación programática con Vue Router
Clase 33 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
Domina la navegación en aplicaciones de una sola página con View Router: desde crear rutas básicas y enlaces con Router Link, hasta manejar rutas dinámicas con parámetros, consumir la API por ID y hacer navegación programática con $router.push. Además, activa history mode para URLs limpias sin hash y mejora la UX con renderizado condicional.
¿Cómo crear rutas y navegar con elementos HTML?
Crear un componente simple y asociarlo a una ruta es el primer paso. Se construye About.vue dentro de Components con solo HTML y se define su ruta en routes.js. Al principio, la navegación por URL funciona con hash, pero la idea es ofrecer enlaces visibles al usuario con Router Link dentro de header.vue.
- Crea About.vue con un título Nosotros.
- Define la ruta en routes.js y pruébala escribiendo /about en la URL.
- Usa Router Link con la propiedad to para enlazar a rutas existentes.
- Ajusta paths coherentes: la ruta de búsqueda es '/'.
- También puedes pasar un objeto con v-bind:to para usar name en lugar de path.
Ejemplo de rutas en routes.js:
import About from '@/components/About.vue'
export default [
{ path: '/about', name: 'About', component: About },
// raíz para buscar
{ path: '/', name: 'search', component: Search }
]
Ejemplos en header.vue con Router Link:
<nav class="nav-right nav-menu">
<router-link class="nav-item" to="/">Buscar</router-link>
<router-link class="nav-item" to="/about">Nosotros</router-link>
</nav>
<!-- usando objeto -->
<router-link class="nav-item" :to="{ name: 'search' }">Buscar</router-link>
Conceptos y habilidades clave: - Router Link y propiedad to para navegación declarativa. - v-bind y objetos con name para preparar rutas con parámetros. - Coherencia de URLs y nombres de ruta.
¿Cómo construir rutas dinámicas con parámetros y consumir la API?
Para mostrar el detalle de una canción, se crea TrackDetail.vue y una ruta parametrizada. El patrón /track/:id permite cambiar el contenido según el id. Se integra un servicio que obtiene la canción por ID usando un template string de ECMAScript 2015 y se renderiza el componente PM track cuando la data está lista.
- Crea la ruta dinámica /track/:id en routes.js.
- Importa el componente Track y regístralo como pm-track.
- Implementa trackService.getById(id) con template string y .then para devolver la data.
- En el hook created, lee this.$route.params.id y consulta la API.
- Usa v-if para evitar renderizar hasta que existan track y track.album.
- Ajusta el layout con clases de Bulma: container, columns, column.
routes.js:
import TrackDetail from '@/components/TrackDetail.vue'
export default [
{ path: '/track/:id', name: 'track', component: TrackDetail }
]
services/track.js:
const trackService = {
getById(id) {
return platzyMusicService
.get(`tracks/${id}`)
.then(res => res.data)
}
}
export default trackService
TrackDetail.vue:
<template>
<section class="container columns" v-if="track && track.album">
<div class="column is-5 is-offset-4">
<pm-track :track="track" />
</div>
</section>
</template>
<script>
import Track from '@/components/Track.vue'
import trackService from '@/services/track'
export default {
name: 'TrackDetail',
components: { 'pm-track': Track },
data() {
return { track: {} }
},
created() {
const id = this.$route.params.id
trackService.getById(id).then(res => {
this.track = res
})
}
}
</script>
<style scoped>
.columns { margin: 20px; }
</style>
Conceptos y habilidades clave: - Ruta parametrizada con /track/:id para contenido dinámico. - this.$route.params para leer parámetros de la URL. - Consumo de API por ID y template strings con backticks. - Renderizado condicional con v-if para evitar errores. - Integración de componentes y layout con Bulma.
¿Cómo navegar programáticamente y activar history mode?
Cuando se necesita cambiar de ruta desde el código, se usa this.$router.push. Es clave diferenciar $route (información de la ruta actual) de $router (control del enrutador). Finalmente, al activar history mode, las URLs se limpian y desaparece el hash; se requiere soporte en el servidor.
- Agrega un gatillo UI (por ejemplo, un botón) que invoque goToTrack(id).
- Implementa goToTrack con this.$router.push y params dinámicos.
- Diferencia $route vs $router: información vs control.
- Activa mode: 'history' al crear el router.
Track.vue (método y uso):
<!-- dentro del template -->
<button @click="goToTrack(track.id)">🌐</button>
<script>
export default {
methods: {
goToTrack(id) {
this.$router.push({ name: 'track', params: { id } })
}
}
}
</script>
main.js (history mode):
const router = new VueRouter({
routes,
mode: 'history'
})
Conceptos y habilidades clave: - Navegación programática con this.$router.push y params. - Uso del historial HTML5 coherente con push del router. - history mode para URLs sin hash y consideraciones de servidor.
¿Tienes dudas o mejoras de UI que quieras proponer? Comparte tus comentarios y cuéntame qué reto implementarás primero.