Vue Router — это официальная библиотека маршрутизации для фреймворка Vue.js, которая позволяет управлять навигацией внутри одностраничного приложения (SPA). Она обеспечивает возможность связывать URL с конкретными компонентами, создавать вложенные маршруты, динамические параметры и навигационные переходы.
Для начала работы необходимо установить библиотеку:
npm install vue-router
Создание маршрутизатора выполняется через импорт
createRouter и createWebHistory (или
createWebHashHistory) из Vue Router:
import { createRouter, createWebHistory } from 'vue-router';
import Home from './views/Home.vue';
import About from './views/About.vue';
const routes = [
{ path: '/', component: Home },
{ path: '/about', component: About },
];
const router = createRouter({
history: createWebHistory(),
routes,
});
export default router;
Подключение маршрутизатора к приложению Vue осуществляется через
метод use:
import { createApp } from 'vue';
import App from './App.vue';
import router from './router';
createApp(App).use(router).mount('#app');
<router-link>Для переходов между маршрутами используется
<router-link>:
<router-link to="/">Главная</router-link>
<router-link to="/about">О проекте</router-link>
Ключевые свойства:
to — путь или объект маршрута, к которому будет
осуществлен переход.replace — если установлено, переход не добавляется в
историю браузера.active-class — CSS-класс для активной ссылки.Внутри компонентов можно использовать метод
router.push:
export default {
methods: {
goToAbout() {
this.$router.push('/about');
},
},
};
Также доступны:
router.replace() — аналогично push, но не
сохраняет запись в истории.router.go(n) — переход на n шагов назад
или вперед в истории.Маршруты могут принимать параметры:
const routes = [
{ path: '/user/:id', component: UserProfile },
];
В компоненте доступ к параметрам осуществляется через
route.params:
export default {
computed: {
userId() {
return this.$route.params.id;
},
},
};
Можно задавать регулярные выражения для параметров:
{ path: '/user/:id(\\d+)', component: UserProfile }
Вложенные маршруты позволяют отображать один компонент внутри
другого. Используется опция children:
const routes = [
{
path: '/dashboard',
component: Dashboard,
children: [
{ path: 'stats', component: Stats },
{ path: 'settings', component: Settings },
],
},
];
В родительском компоненте необходимо добавить
<router-view> для отображения дочерних маршрутов:
<template>
<div>
<h1>Панель управления</h1>
<router-view></router-view>
</div>
</template>
Именованные маршруты позволяют ссылаться на маршруты через имя, а не через путь:
const routes = [
{ path: '/profile/:id', component: UserProfile, name: 'userProfile' },
];
Навигация по имени маршрута:
this.$router.push({ name: 'userProfile', params: { id: 123 } });
Vue Router предоставляет глобальные, маршрутов и компонентные охранники, позволяющие контролировать доступ и выполнять действия при переходах.
router.beforeEach((to, from, next) => {
if (to.meta.requiresAuth && !isAuthenticated()) {
next('/login');
} else {
next();
}
});
const routes = [
{
path: '/admin',
component: AdminPanel,
beforeEnter: (to, from, next) => {
if (isAdmin()) next();
else next('/');
},
},
];
export default {
beforeRouteEnter(to, from, next) {
console.log('Переход в компонент');
next();
},
beforeRouteUpdate(to, from, next) {
console.log('Обновление маршрута');
next();
},
beforeRouteLeave(to, from, next) {
console.log('Выход из компонента');
next();
},
};
Для оптимизации загрузки больших приложений используют динамический импорт:
const About = () => import('./views/About.vue');
const routes = [
{ path: '/about', component: About },
];
Это создаст отдельный чанк для компонента About, который
загрузится только при переходе на соответствующий маршрут.
createWebHistory) —
использует стандартные URL без хеша (/about), требует
настройки сервера для корректной обработки маршрутов.createWebHashHistory) —
использует хеш в URL (/#/about), не требует серверной
настройки.Query-параметры позволяют передавать данные через URL:
this.$router.push({ path: '/search', query: { q: 'vue' } });
Доступ внутри компонента:
computed: {
query() {
return this.$route.query.q;
},
}
Vue Router позволяет управлять историей браузера:
router.back() — перейти назад.router.forward() — перейти вперед.router.go(n) — шаги навигации.{ path: '/home', redirect: '/' }
{ path: '/profile/:id', component: UserProfile, alias: '/u/:id' }
Каждый маршрут может содержать meta — объект с
пользовательскими данными:
{
path: '/admin',
component: AdminPanel,
meta: { requiresAuth: true, title: 'Админка' },
}
Доступ к метаданным:
this.$route.meta.requiresAuth
Метаданные часто используются для проверки доступа, установки заголовков страниц и условного отображения элементов интерфейса.
<router-view><router-view> — контейнер, в котором отображаются
компоненты текущего маршрута. Может использоваться с именами для
нескольких областей:
<router-view name="sidebar"></router-view>
<router-view></router-view>
Для вложенных маршрутов <router-view> обеспечивает
рендер дочерних компонентов.
Эти инструменты Vue Router позволяют строить масштабируемые SPA, управлять маршрутизацией гибко и безопасно, поддерживая динамику приложений и высокую производительность.