Vue Router зіставляє адресу в браузері з компонентом і показує його без перезавантаження сторінки.
import { createRouter, createWebHistory } from 'vue-router';
const router = createRouter({
history: createWebHistory(),
routes: [
{ path: '/', component: Home },
{ path: '/users/:id', name: 'user', component: UserProfile },
{ path: '/:pathMatch(.*)*', component: NotFound }, // усе інше - 404
],
});
app.use(router);
<template>
<nav>
<RouterLink to="/">Головна</RouterLink>
<RouterLink :to="{ name: 'user', params: { id: 7 } }">Профіль</RouterLink>
</nav>
<RouterView /> <!-- тут рендериться компонент поточного маршруту -->
</template>
Динамічні параметри. :id у шляху - параметр. У компоненті він доступний через useRoute():
<script setup>
import { useRoute, useRouter } from 'vue-router';
const route = useRoute(); // поточний маршрут: params, query, hash, meta
const router = useRouter(); // навігація з коду
console.log(route.params.id); // '7' - завжди рядок
router.push({ name: 'user', params: { id: 8 } });
</script>
Що варто знати:
- параметри - рядки.
route.params.id === 7хибне - требаNumber(route.params.id); - іменовані маршрути (
name: 'user') надійніші за рядкові шляхи: при зміні URL посилання в коді не ламаються; RouterLinkзамість<a href>- інакше браузер перезавантажить сторінку;- query-параметри (
?page=2) - уroute.query, вони не входять у шаблон шляху.
Vue Router 5 зберіг API четвертої версії й додав маршрутизацію на основі файлів (колишній unplugin-vue-router): маршрути генеруються зі структури каталогу src/pages, а route.params отримують точні типи в TypeScript.