Для начала работы с Vue Router необходимо установить библиотеку через пакетный менеджер. В проектах на Vue 3 используется следующая команда:
npm install vue-router@4
После установки создаётся конфигурация маршрутов. Маршрут — это объект, который связывает URL с конкретным компонентом.
import { createRouter, createWebHistory } from 'vue-router';
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
});
export default router;
Объяснение ключевых параметров:
createRouter — функция для создания экземпляра
роутера.history — способ хранения истории переходов.
createWebHistory() использует HTML5 History API, позволяя
делать чистые URL без хэшей.routes — массив объектов маршрутов, каждый из которых
содержит path и component.Чтобы роутер начал работать, его необходимо интегрировать в главный экземпляр приложения Vue:
import { createApp } from 'vue';
import App from './App.vue';
import router from './router';
const app = createApp(App);
app.use(router);
app.mount('#app');
Метод app.use(router) подключает роутер ко всему
приложению, после чего компоненты <router-view>
начинают отображать текущий маршрут.
<router-view> и <router-link><router-view> — динамическая область, куда
подгружается компонент, соответствующий текущему маршруту.<router-link> — элемент для навигации между
маршрутами, который автоматически использует pushState для обновления
URL:<template>
<nav>
<router-link to="/">Главная</router-link>
<router-link to="/about">О проекте</router-link>
</nav>
<router-view></router-view>
</template>
to может быть строкой (URL) или объектом с более
детальной конфигурацией, например, указанием параметров:
<router-link :to="{ name: 'user', params: { id: 123 }}">Профиль</router-link>
Именование маршрутов упрощает ссылку на них и использование динамических параметров.
const routes = [
{ path: '/user/:id', name: 'user', component: User }
];
В таком случае можно переходить с помощью:
router.push({ name: 'user', params: { id: 42 } });
Маршруты могут содержать переменные, которые передаются компоненту
через props. Это удобно для изолированного тестирования и
повторного использования:
const routes = [
{
path: '/profile/:id',
component: Profile,
props: true
}
];
Внутри компонента Profile параметр доступен напрямую
через props:
export default {
props: ['id'],
mounted() {
console.log('ID пользователя:', this.id);
}
}
Vue Router позволяет создавать вложенные маршруты для сложных приложений.
const routes = [
{
path: '/dashboard',
component: Dashboard,
children: [
{ path: '', component: Overview },
{ path: 'settings', component: Settings }
]
}
];
В родительском компоненте Dashboard нужно использовать
<router-view> для отображения дочерних
компонентов.
Для оптимизации больших проектов компоненты можно загружать динамически:
const About = () => import('./components/About.vue');
const routes = [
{ path: '/about', component: About }
];
Ленивая загрузка снижает первоначальный размер бандла и ускоряет загрузку страницы.
Навигационные охранники (navigation guards) позволяют
контролировать переход между маршрутами:
router.beforeEach((to, from, next) => {
if (to.path === '/admin' && !isLoggedIn()) {
next('/');
} else {
next();
}
});
beforeEach вызывается перед каждым переходом.next() разрешает переход, при необходимости можно
передавать URL для редиректа.Vue Router поддерживает два основных режима:
createWebHistory() — чистые URL без
#.createWebHashHistory() — URL с хэшем (например,
/about#section), используется в приложениях без серверной
поддержки маршрутизации.Выбор режима зависит от настроек сервера и требований к SEO.
Помимо <router-link>, навигацию можно выполнять
программно через экземпляр роутера:
this.$router.push('/about');
this.$router.replace({ name: 'home' });
push добавляет запись в историю браузера.replace заменяет текущую запись, что удобно для
редиректов.Эта конфигурация формирует основу любого Vue-приложения с маршрутизацией, обеспечивая контроль над URL, структурой компонентов и переходами между ними.