В библиотеке Vue Router каждый маршрут может иметь уникальное имя, что позволяет ссылаться на него не через путь, а через идентификатор. Использование имен маршрутов упрощает управление навигацией, особенно при динамических параметрах и изменениях URL.
Именованный маршрут задается в объекте маршрута с помощью свойства
name:
import { createRouter, createWebHistory } from 'vue-router';
import Home from './components/Home.vue';
import Profile from './components/Profile.vue';
const routes = [
{
path: '/',
name: 'home',
component: Home
},
{
path: '/profile/:userId',
name: 'profile',
component: Profile
}
];
const router = createRouter({
history: createWebHistory(),
routes
});
export default router;
Ключевые моменты:
name должен быть уникальным среди всех маршрутов.Для перехода к маршруту можно использовать объект с именем маршрута вместо строки пути:
// Переход программно
router.push({ name: 'profile', params: { userId: 42 } });
// Использование в шаблоне
<router-link :to="{ name: 'home' }">Главная</router-link>
<router-link :to="{ name: 'profile', params: { userId: 42 } }">Профиль</router-link>
Особенности передачи параметров:
:userId) указываются
через объект params.params без имени маршрута, Vue Router
не сможет корректно сопоставить параметры с маршрутом.Именованные маршруты особенно полезны при работе с вложенными маршрутами:
const routes = [
{
path: '/dashboard',
name: 'dashboard',
component: () => import('./components/Dashboard.vue'),
children: [
{
path: 'settings',
name: 'dashboard-settings',
component: () => import('./components/Settings.vue')
},
{
path: 'stats',
name: 'dashboard-stats',
component: () => import('./components/Stats.vue')
}
]
}
];
Навигация к дочернему маршруту выполняется через имя:
router.push({ name: 'dashboard-settings' });
Это особенно важно при реорганизации путей: структура URL может измениться, но ссылки через имена останутся корректными.
Если путь маршрута изменяется, но имя остаётся тем же, навигация
через router-link и router.push не требует
изменений. Пример:
// Исходный маршрут
{ path: '/profile/:userId', name: 'profile', component: Profile }
// Новый маршрут
{ path: '/user/:userId', name: 'profile', component: Profile }
Все вызовы через
{ name: 'profile', params: { userId: 42 } } продолжают
работать без изменений.
Методы router.push, router.replace и
router.resolve поддерживают указание маршрута по имени:
router.replace({ name: 'home' });
const resolved = router.resolve({ name: 'profile', params: { userId: 10 } });
console.log(resolved.href); // /profile/10
Использование имен маршрутов в resolve удобно для
генерации ссылок на маршруты динамически, без жесткой привязки к
пути.
name для
нескольких маршрутов, даже если пути различаются.dashboard-settings,
dashboard-stats.Именование маршрутов в Vue Router является стандартной практикой для крупных приложений, где структура маршрутов сложная и требует гибкой навигации с параметрами.