Vue Router предоставляет мощный механизм работы с маршрутами, позволяя организовать навигацию между компонентами в приложении на Vue.js. Одной из ключевых возможностей является навигация по имени маршрута, что позволяет ссылаться на маршруты через их именованные идентификаторы, а не через URL-пути. Такой подход повышает устойчивость к изменениям структуры URL и упрощает поддержку кода.
Каждый маршрут в Vue Router может быть задан с уникальным именем с
помощью свойства name:
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: '/', name: 'home', component: Home },
{ path: '/about', name: 'about', component: About },
{ path: '/profile/:userId', name: 'profile', component: Profile }
];
const router = createRouter({
history: createWebHistory(),
routes
});
export default router;
name — уникальный идентификатор маршрута.path — путь URL, который может содержать динамические
сегменты, такие как :userId.Использование имен упрощает изменение путей в будущем, так как навигация будет зависеть только от имени, а не от конкретного URL.
router.pushНавигация по имени осуществляется методом router.push,
где вместо указания строки с URL можно использовать объект с ключом
name и, при необходимости, параметрами
params:
this.$router.push({ name: 'about' });
Для маршрутов с динамическими параметрами:
this.$router.push({
name: 'profile',
params: { userId: 42 }
});
Важно: при навигации по имени маршрута с динамическими сегментами URL нужно обязательно передавать все необходимые параметры. Иначе Vue Router выдаст предупреждение и не сможет корректно сформировать путь.
<router-link>Компонент <router-link> также поддерживает
навигацию по имени:
<router-link :to="{ name: 'home' }">Главная</router-link>
<router-link :to="{ name: 'profile', params: { userId: 42 } }">Профиль</router-link>
Особенности использования params в
<router-link>:
params работают только в том случае, если маршрут
определён с именем.params без имени маршрута, параметры
будут проигнорированы.params можно
не указывать.queryКроме params, можно передавать строку
запроса через объект query:
this.$router.push({
name: 'about',
query: { ref: 'newsletter' }
});
Результирующий URL будет выглядеть так:
/about?ref=newsletter. Это удобно для передачи фильтров,
настроек сортировки или других параметров, которые не влияют на
структуру маршрута.
<router-link :to="{ name: 'about', query: { ref: 'newsletter' } }">О нас</router-link>
params.<router-link> и
router.push/router.replace:
одинаковый синтаксис упрощает поддержку кода.params.params с
<router-link> и объектной навигацией Vue Router
автоматически формирует URL.router.push и router.replace
возвращают промис, который можно использовать для обработки ошибок
навигации:this.$router.push({ name: 'home' })
.then(() => console.log('Навигация успешна'))
.catch(err => console.error('Ошибка навигации', err));
Именованная навигация также работает с вложенными маршрутами. Для этого достаточно указывать имя дочернего маршрута:
const routes = [
{
path: '/dashboard',
component: Dashboard,
children: [
{ path: 'stats', name: 'dashboard-stats', component: Stats },
{ path: 'settings', name: 'dashboard-settings', component: Settings }
]
}
];
Навигация к дочернему маршруту:
this.$router.push({ name: 'dashboard-settings' });
params для динамических сегментов и
query для передачи дополнительных данных.router.push/router.replace, так и в
<router-link>.Навигация по имени — это фундаментальный инструмент при построении масштабируемых Vue-приложений, который обеспечивает удобное и безопасное управление маршрутизацией.