В Vue Router навигация между компонентами осуществляется через маршруты, которые определяются в конфигурации маршрутизатора. Понимание различий между абсолютными и относительными путями играет ключевую роль при построении сложных приложений с вложенной навигацией.
Абсолютный путь — это путь, который начинается с символа
/ и определяется относительно корня маршрутизатора. Он не
зависит от текущего маршрута, поэтому навигация с использованием
абсолютного пути всегда ведёт к точно определённому маршруту.
Пример конфигурации:
import { createRouter, createWebHistory } from 'vue-router';
import Home from './components/Home.vue';
import About from './components/About.vue';
import Profile from './components/Profile.vue';
const routes = [
{ path: '/', component: Home },
{ path: '/about', component: About },
{ path: '/profile', component: Profile },
];
const router = createRouter({
history: createWebHistory(),
routes,
});
export default router;
В этом примере путь /about всегда ведёт к компоненту
About, независимо от того, где пользователь находится в
приложении.
Использование абсолютного пути в шаблоне:
<router-link to="/profile">Профиль</router-link>
Такой подход гарантирует предсказуемость навигации и упрощает маршруты для страниц верхнего уровня.
Относительный путь не начинается с / и вычисляется
относительно текущего маршрута. Он часто используется
при навигации внутри вложенных маршрутов, где абсолютные пути могут быть
слишком длинными и неудобными для поддержки.
Пример вложенных маршрутов:
const routes = [
{ path: '/', component: Home },
{
path: '/about',
component: About,
children: [
{ path: 'team', component: () => import('./components/Team.vue') },
{ path: 'history', component: () => import('./components/History.vue') },
]
},
];
В данном примере относительные пути team и
history рассчитываются относительно родительского пути
/about.
Использование в шаблоне:
<router-link to="team">Команда</router-link>
<router-link to="history">История</router-link>
Если пользователь находится на странице /about, переход
по team приведёт его на /about/team, а
history — на /about/history.
Методы router.push и router.replace также
поддерживают абсолютные и относительные пути.
Абсолютный путь:
this.$router.push('/profile');
Относительный путь в пределах вложенного маршрута:
this.$router.push('team'); // относительный путь от текущего маршрута
Важно помнить, что относительные пути корректно работают только внутри компонентов, которые находятся в контексте маршрута. Вне контекста текущего маршрута относительный путь будет интерпретирован некорректно.
| Тип пути | Начало | Относительно | Применение |
|---|---|---|---|
| Абсолютный | / |
корня | Главная навигация, страницы верхнего уровня |
| Относительный | без / |
текущего маршрута | Вложенные маршруты, локальная навигация |
router-link без учёта текущего маршрута вызывает
неожиданные переходы.'about' вместо
'/about') превращают путь в относительный, что может
сломать навигацию.Хотите, я продолжу с примерами динамических относительных маршрутов и вложенной навигации с параметрами?