Маршрутизация — один из ключевых компонентов архитектуры одностраничных приложений (SPA) во Vue.js. Она позволяет управлять переходами между различными компонентами, обеспечивая динамическую загрузку контента без перезагрузки страницы. Для реализации маршрутов используется библиотека Vue Router, официальное решение для маршрутизации в экосистеме Vue.
Для работы с Vue Router необходимо установить пакет через npm:
npm install vue-router@next
Подключение к приложению Vue выполняется через создание экземпляра маршрутизатора и интеграцию его в корневой объект приложения:
import { createApp } from 'vue';
import { createRouter, createWebHistory } from 'vue-router';
import App from './App.vue';
import Home from './components/Home.vue';
import About from './components/About.vue';
const routes = [
{ path: '/', component: Home },
{ path: '/about', component: About }
];
const router = createRouter({
history: createWebHistory(),
routes
});
const app = createApp(App);
app.use(router);
app.mount('#app');
Ключевые моменты:
createRouter создает экземпляр маршрутизатора.createWebHistory используется для использования HTML5
History API, обеспечивая чистые URL без хеша (#).routes определяет соответствие URL и
компонентов.Маршрут описывается объектом с обязательным свойством
path и component. Дополнительно можно
использовать:
name — уникальное имя маршрута, позволяющее обращаться
к нему программно.props — передача параметров в компонент через
маршрутизатор.redirect — перенаправление на другой путь.children — вложенные маршруты для реализации
многоуровневой навигации.Пример маршрутов с именами и параметрами:
const routes = [
{
path: '/',
name: 'home',
component: Home
},
{
path: '/user/:id',
name: 'user',
component: () => import('./components/User.vue'),
props: true
},
{
path: '/about',
redirect: '/'
}
];
Особенности:
:id позволяет динамически захватывать
параметры из URL.props: true автоматически передает параметр
id в компонент как проп.import()
уменьшает размер начального бандла и ускоряет загрузку приложения.Вложенные маршруты позволяют создавать многоуровневую структуру
приложения. Для этого используется свойство children:
const routes = [
{
path: '/dashboard',
component: Dashboard,
children: [
{ path: '', component: DashboardHome },
{ path: 'settings', component: DashboardSettings },
{ path: 'profile', component: DashboardProfile }
]
}
];
Особенности работы:
'' в дочернем маршруте соответствует
отображению компонента по умолчанию.<router-view> внутри родительского компонента.Переходы между маршрутами могут выполняться программно или с помощью специальных компонентов:
Программная навигация:
this.$router.push({ name: 'user', params: { id: 123 } });
Компонентная навигация:
<router-link :to="{ name: 'about' }">О сайте</router-link>
Преимущества router-link:
Vue Router предоставляет навигционные охранники, позволяющие выполнять проверку перед переходом:
router.beforeEach((to, from, next) => {
if (to.meta.requiresAuth && !isAuthenticated()) {
next({ name: 'login' });
} else {
next();
}
});
Ключевые точки:
beforeEach — глобальный охранник перед каждым
переходом.meta — пользовательские данные маршрута, например,
requiresAuth.next() — управление продолжением или перенаправлением
маршрута.Динамические маршруты позволяют создавать страницы, параметры которых зависят от URL. Пример:
const routes = [
{ path: '/product/:productId', component: Product, props: true }
];
В компоненте Product:
export default {
props: ['productId'],
mounted() {
fetchProduct(this.productId);
}
};
Особенности:
props упрощает тестирование и повторное
использование компонента.Vue Router позволяет управлять скроллом и режимом истории:
const router = createRouter({
history: createWebHistory(),
routes,
scrollBehavior(to, from, savedPosition) {
if (savedPosition) return savedPosition;
return { top: 0 };
}
});
Принципы работы scrollBehavior:
{ top: 0 } перемещает страницу вверх при
каждом переходе.savedPosition используется для возврата к предыдущей
позиции при навигации назад/вперед.Для оптимизации производительности рекомендуется загружать компоненты по требованию:
const routes = [
{
path: '/about',
component: () => import('./components/About.vue')
}
];
Преимущества:
path и
предпочтительно name.<router-view> в
родительских компонентах.Маршруты во Vue.js обеспечивают гибкость и масштабируемость приложения, упрощают управление навигацией и взаимодействие между компонентами, что делает Vue Router центральным элементом построения современных одностраничных приложений.