Vue.js

Vuejs

Tutorial Vuejs: Definición y manejo de rutas

Vue: Aprende a definir y manejar rutas en aplicaciones SPA con vue-router. Mejora la navegación en tu proyecto con esta guía completa.

Aprende Vuejs GRATIS y certifícate

Configuración y definición de rutas en el archivo routerjs

En Vue, la configuración de rutas se gestiona mediante el paquete vue-router, que permite definir y manejar la navegación de una aplicación de una sola página (SPA).

Crea un archivo llamado router.js en el directorio src de tu proyecto. Este archivo será el encargado de definir las rutas de tu aplicación y su configuración. Comienza importando las funciones necesarias de vue-router:

import { createRouter, createWebHistory } from 'vue-router';

El siguiente paso es definir las rutas. Las rutas son objetos que especifican el camino hacia un componente determinado. Aquí tienes un ejemplo básico de cómo definirlas:

const routes = [
  {
    path: '/',
    name: 'Home',
    component: () => import('./components/Home.vue')
  },
  {
    path: '/about',
    name: 'About',
    component: () => import('./components/About.vue')
  }
];

En este ejemplo, hemos definido dos rutas: una para el componente Home y otra para el componente About. Utilizamos la función de importación dinámica para mejorar el rendimiento mediante la carga diferida de los componentes.

Con las rutas definidas, el siguiente paso es crear una instancia del router. Utiliza createRouter y pasa las rutas junto con el historial de navegación:

const router = createRouter({
  history: createWebHistory(),
  routes
});

createWebHistory se utiliza para habilitar el modo de historial HTML5, lo que permite URLs limpias sin el hash # en la barra de direcciones.

Por último, exporta el router para que pueda ser utilizado en tu aplicación:

export default router;

Para integrar este router en tu aplicación Vue, debes importarlo en el archivo principal de tu aplicación, usualmente main.js, y registrarlo en la instancia de Vue:

import { createApp } from 'vue';
import App from './App.vue';
import router from './router';

createApp(App)
  .use(router)
  .mount('#app');

Este proceso completa la configuración básica de rutas en Vue. A partir de este punto, puedes navegar entre los componentes definidos utilizando el componente <router-link> o mediante programación con router.push(), asegurando una experiencia de navegación fluida y dinámica en tu aplicación.

Definición de rutas con nombres

En Vue, el uso de rutas con nombres es una práctica recomendada para manejar la navegación dentro de una aplicación de manera más clara y mantenible. Asignar nombres a las rutas permite facilitar la navegación programática y la generación de enlaces, especialmente en aplicaciones con estructuras de rutas complejas.

Para definir una ruta con un nombre, se utiliza el atributo name en el objeto de configuración de la ruta. Este nombre debe ser único dentro del conjunto de rutas de la aplicación. Aquí tienes un ejemplo de cómo definir rutas con nombres:

const routes = [
  {
    path: '/',
    name: 'Home',
    component: () => import('./components/Home.vue')
  },
  {
    path: '/about',
    name: 'About',
    component: () => import('./components/About.vue')
  },
  {
    path: '/contact',
    name: 'Contact',
    component: () => import('./components/Contact.vue')
  }
];

En este ejemplo, cada ruta tiene un nombre asociado: Home, About y Contact. Estos nombres pueden ser utilizados para navegar de forma programática en lugar de depender de las rutas de URL directamente.

El uso de rutas con nombres también es ventajoso al crear enlaces en los componentes de Vue. El componente <router-link> puede utilizar el atributo :to para especificar el nombre de la ruta en lugar de la ruta de URL:

<template>
  <div>
    <router-link :to="{ name: 'Home' }">Inicio</router-link>
    <router-link :to="{ name: 'About' }">Acerca de</router-link>
    <router-link :to="{ name: 'Contact' }">Contacto</router-link>
  </div>
</template>

En este ejemplo, los enlaces navegan a las rutas correspondientes utilizando sus nombres, lo que proporciona una capa adicional de abstracción y reduce la dependencia de las rutas específicas de URL.

Además, las rutas con nombres simplifican la gestión de rutas anidadas y la reutilización de componentes dentro de diferentes rutas. Si en el futuro se decide cambiar la estructura de las rutas, el uso de nombres facilita la actualización sin necesidad de modificar múltiples partes del código.

Es importante tener en cuenta que los nombres de las rutas deben ser únicos en toda la aplicación para evitar conflictos y asegurar una navegación coherente. La consistencia en la nomenclatura y la organización de las rutas con nombres es clave para mantener el código legible y fácil de mantener.

Uso de parámetros de rutas y query strings

En Vue, los parámetros de rutas y los query strings son fundamentales para crear rutas dinámicas y manejar la comunicación entre componentes a través de la URL. Los parámetros de rutas permiten definir partes variables de la URL que pueden ser capturadas y utilizadas dentro de los componentes, mientras que los query strings proporcionan una forma de pasar información adicional a través de la URL de manera opcional.

Para definir parámetros de rutas, utiliza los dos puntos : seguidos del nombre del parámetro en la definición del path dentro de router.js. Considera el siguiente ejemplo:

const routes = [
  {
    path: '/user/:id',
    name: 'UserProfile',
    component: () => import('./components/UserProfile.vue')
  }
];

En este caso, :id es un parámetro de ruta que puede capturar cualquier valor que se pase en la URL después de /user/. Para acceder a este parámetro dentro del componente UserProfile.vue, se utiliza el objeto route proporcionado por vue-router:

<!-- UserProfile.vue -->
<template>
  <div>
    <h1>Perfil de Usuario</h1>
    <p>ID de usuario: {{ userId }}</p>
  </div>
</template>

<script setup>
import { useRoute } from 'vue-router';

const route = useRoute();
const userId = route.params.id;
</script>

Aquí, useRoute es un composable que devuelve el objeto route, permitiendo acceder a params para obtener el valor del parámetro id.

Los query strings se definen como parte de la URL después del símbolo ?, y se estructuran en pares clave-valor. Para navegar programáticamente a una ruta con query strings, puedes usar :to pasando un objeto que incluya query:

<template>
  <h1>Inicio</h1>

  <router-link :to="{ name: 'UserProfile', params: { id: 123 }, query: { ref: 'homepage' } }">Perfil de
      usuario</router-link>
</template>

En este ejemplo, además del parámetro de ruta id, se pasa un query string ref con el valor homepage. Dentro del componente, los query strings se acceden a través del mismo objeto route:

<!-- UserProfile.vue -->
<template>
  <div>
    <h1>Perfil de Usuario</h1>
    <p>ID de usuario: {{ userId }}</p>
    <p>Referencia: {{ referrer }}</p>
  </div>
</template>

<script setup>
import { useRoute } from 'vue-router';

const route = useRoute();
const userId = route.params.id;
const referrer = route.query.ref;
</script>

Es importante tener en cuenta que mientras los parámetros de rutas son obligatorios para que la ruta coincida, los query strings son opcionales, permitiendo mayor flexibilidad en la forma en que se estructuran las URLs y se transmiten los datos.

Cuando trabajas con rutas que incluyen tanto parámetros como query strings, es esencial validar y manejar adecuadamente estos valores dentro de los componentes para asegurar que la aplicación se comporte de manera predecible y segura. Esto puede incluir la verificación de la existencia de parámetros o la aplicación de lógica de negocio basada en los valores recibidos.

Además, al definir rutas dinámicas, es recomendable establecer los tipos de datos esperados para los parámetros en la documentación del componente, facilitando su uso y mantenimiento dentro del equipo de desarrollo.

Manejo de rutas con props

En Vue, el manejo de rutas con props es una técnica que permite pasar datos directamente a los componentes a través de las rutas, facilitando la interacción y el flujo de datos en la aplicación. Esta funcionalidad es especialmente útil cuando se desea que un componente reciba parámetros de ruta de manera más directa y tipada. Al utilizar props, se evita el acoplamiento del componente con el objeto route, lo que mejora la testabilidad y la reutilización del componente.

Para habilitar el paso de props en una ruta, se debe establecer la propiedad props en la configuración de la ruta dentro de router.js. Esta propiedad puede ser un booleano, un objeto o una función, dependiendo de cómo se desee procesar los datos.

Uso de props como booleano

Cuando props se configura como true, los parámetros de ruta se pasan automáticamente como props al componente. Considera el siguiente ejemplo:

const routes = [
  {
    path: '/user/:id',
    name: 'UserProfile',
    component: () => import('./components/UserProfile.vue'),
    props: true
  }
];

En este caso, el parámetro id se pasará automáticamente como un prop al componente UserProfile. Dentro del componente, se puede acceder directamente a este prop:

<!-- UserProfileProps.vue -->

<template>
  <div>
    <h1>Perfil de Usuario</h1>
    <p>ID de usuario: {{ userId }}</p>
  </div>
</template>

<script setup>
import { defineProps } from 'vue';

const props = defineProps(['id']);
const userId = props.id;
</script>

Uso de props como objeto

Si se desea pasar información adicional que no está en la URL, se puede configurar props como un objeto estático:

const routes = [
  {
    path: '/settings',
    name: 'UserSettings',
    component: () => import('./components/UserSettings.vue'),
    props: { defaultView: 'profile' }
  }
];

En este ejemplo, el componente UserSettings recibirá defaultView como un prop, sin necesidad de que esté presente en la URL.

Uso de props como función

Para un control más avanzado, props puede ser una función que recibe el objeto route y devuelve un objeto de props. Esto es útil para transformar o validar los datos antes de pasarlos al componente:

const routes = [
  {
    path: '/order/:orderId',
    name: 'OrderDetails',
    component: () => import('./components/OrderDetails.vue'),
    props: route => ({ orderId: parseInt(route.params.orderId) })
  }
];

Aquí, el orderId se convierte a un número entero antes de ser pasado al componente OrderDetails:

<!-- OrderDetails.vue -->
<template>
  <div>
    <h1>Detalles del Pedido</h1>
    <p>ID del pedido: {{ orderId }}</p>
  </div>
</template>

<script setup>
import { defineProps } from 'vue';

const props = defineProps(['orderId']);
const orderId = prop.orderId
</script>

El uso de props en rutas proporciona una forma clara y mantenible de pasar datos a los componentes, eliminando la necesidad de manipular el objeto route directamente dentro del componente. Esto facilita la separación de responsabilidades, permitiendo que los componentes se centren únicamente en la presentación y lógica de negocio, mientras que el enrutador maneja la lógica de navegación y gestión de rutas.

Creación de rutas con alias

En Vue, los alias de rutas ofrecen una forma flexible de definir múltiples caminos de acceso a un mismo componente. Esto es útil cuando se desea que una ruta sea accesible a través de diferentes URLs, proporcionando una experiencia de usuario más intuitiva o cuando se necesita mantener compatibilidad con URLs antiguas.

Para definir un alias en una ruta, basta con agregar la propiedad alias en el objeto de configuración de la ruta dentro de router.js. El valor de alias puede ser una cadena o un array de cadenas, permitiendo definir uno o varios alias para la misma ruta.

Considera el siguiente ejemplo donde se define una ruta con alias:

const routes = [
  {
    path: '/dashboard',
    name: 'Dashboard',
    component: () => import('./components/Dashboard.vue'),
    alias: ['/home', '/inicio']
  }
];

En este caso, el componente Dashboard es accesible a través de las URLs /dashboard, /home y /inicio. Esto significa que cualquier navegación a cualquiera de estas rutas renderizará el mismo componente.

Los alias son particularmente útiles en escenarios donde se requiere una transición suave entre diferentes versiones de una aplicación o cuando se desea proporcionar accesos rápidos a ciertas secciones desde diferentes partes de la aplicación. Por ejemplo, si se está migrando de una estructura de URLs antigua a una nueva, los alias permiten que las URLs antiguas sigan funcionando mientras se redirige a los usuarios a las nuevas rutas.

Es importante notar que, a diferencia de las redirecciones, los alias no cambian la URL visible en la barra de direcciones del navegador. Esto significa que, aunque el componente renderizado es el mismo, la URL permanece como fue solicitada originalmente por el usuario. En contraste, una redirección cambiaría la URL a la ruta destino.

Para manejar alias de rutas de manera efectiva, es recomendable documentar claramente su uso dentro del equipo de desarrollo, asegurando que todos entiendan la razón detrás de cada alias y cómo se espera que se comporten en diferentes contextos de navegación. Además, se debe tener cuidado de no crear alias que puedan causar ambigüedad o confusión en la navegación de la aplicación.

Si se necesita realizar lógica específica basada en la URL actual, como en el caso de análisis de logs o estadísticas, es importante recordar que los alias no afectan la ruta registrada en el objeto route, por lo que el análisis debe considerar todas las posibles rutas que lleven al mismo componente.

En resumen, los alias de rutas en Vue son una herramienta poderosa para mejorar la navegación y la experiencia de usuario al permitir múltiples accesos a los mismos componentes sin alterar la estructura principal de la aplicación.

Aprende Vuejs GRATIS online

Ejercicios de esta lección Definición y manejo de rutas

Evalúa tus conocimientos de esta lección Definición y manejo de rutas con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.

Todas las lecciones de Vuejs

Accede a todas las lecciones de Vuejs y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Introducción A Vue Y Su Ecosistema

Vue.js

Introducción Y Entorno

Instalar Y Configurar Vue Con Vite

Vue.js

Introducción Y Entorno

Introducción A La Sintaxis De Plantillas

Vue.js

Componentes

Introducción A Componentes

Vue.js

Componentes

Componentes Con Options Api

Vue.js

Componentes

Componentes Con Composition Api

Vue.js

Componentes

Renderizado Condicional Con V-if

Vue.js

Componentes

Renderizado Iterativo Con V-for

Vue.js

Componentes

Props Y Comunicación Entre Componentes

Vue.js

Componentes

Manejo De Eventos En Vue Con V-on

Vue.js

Componentes

Binding Bidireccional Con V-model Y Definemodel

Vue.js

Componentes

Estilización De Componentes

Vue.js

Componentes

Reactividad Con Ref Y Reactive

Vue.js

Composición Y Reactividad

Ciclo De Vida Con Composition Api

Vue.js

Composición Y Reactividad

Composition Api: Provide E Inject

Vue.js

Composición Y Reactividad

Introducción A Los Composables

Vue.js

Composición Y Reactividad

Uso Avanzado De Composables

Vue.js

Composición Y Reactividad

Introducción A Vue Router

Vue.js

Navegación Y Enrutamiento

Definición Y Manejo De Rutas

Vue.js

Navegación Y Enrutamiento

Rutas Anidadas Y Dinámicas

Vue.js

Navegación Y Enrutamiento

Navegación Programática Y Redirección

Vue.js

Navegación Y Enrutamiento

Solicitudes Http Con Fetch Api

Vue.js

Interacción Http Con Apis De Backend

Solicitudes Http Con Axios

Vue.js

Interacción Http Con Apis De Backend

Introducción A Suspense

Vue.js

Interacción Http Con Apis De Backend

Evaluación Test De Conocimientos Vuejs

Vue.js

Evaluación

Accede GRATIS a Vuejs y certifícate

Certificados de superación de Vuejs

Supera todos los ejercicios de programación del curso de Vuejs y obtén certificados de superación para mejorar tu currículum y tu empleabilidad.

En esta lección

Objetivos de aprendizaje de esta lección

  1. Configurar y definir rutas en Vue utilizando vue-router.
  2. Asignar nombres a las rutas para facilitar la navegación programática.
  3. Utilizar parámetros de rutas y query strings para rutas dinámicas.
  4. Pasar props a los componentes a través de las rutas.
  5. Implementar alias de rutas para múltiples accesos al mismo componente.