<target-language> Spanish </target-language> Navegación programática con Vue Router

Clase 33 de 53Curso Profesional de Vue.js 2

Resumen

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.