В Vue Router для управления навигацией между страницами используется
объект маршрутизатора (router). Одним из основных методов
программной навигации является
router.push, который позволяет
инициировать переход на другой маршрут динамически из кода
компонента.
router.pushМетод router.push поддерживает два основных варианта
вызова:
this.$router.push('/home');
В этом случае переход осуществляется на указанный путь. Этот вариант удобен для простых маршрутов без параметров.
this.$router.push({ name: 'profile', params: { userId: 123 } });
Объект может содержать следующие ключи:
name — имя маршрута, определённое в конфигурации
маршрутов;path — путь маршрута, например
'/home';params — параметры маршрута (доступны через
route.params);query — параметры строки запроса (доступны через
route.query).path и
nameИспользование name предпочтительнее, если маршрут
содержит динамические параметры. Пример:
this.$router.push({ name: 'user', params: { id: 42 } });
При попытке использовать path с динамическим параметром
напрямую, необходимо самостоятельно формировать строку пути:
this.$router.push(`/user/42`);
Использование name обеспечивает более безопасную и
читаемую навигацию.
router.pushМетод router.push возвращает Promise,
что позволяет обрабатывать успешный переход или ошибки, возникающие при
навигации:
this.$router.push('/dashboard')
.then(() => {
console.log('Навигация успешно выполнена');
})
.catch(err => {
if (err.name !== 'NavigationDuplicated') {
console.error(err);
}
});
NavigationDuplicated возникает при попытке
перехода на текущий маршрут. Для её игнорирования достаточно проверить
тип ошибки.params) и строка запроса
(query)params используются для динамических сегментов
пути:// Маршрут: /user/:id
this.$router.push({ name: 'user', params: { id: 10 } });
query используется для передачи параметров через
строку запроса:this.$router.push({ path: '/search', query: { q: 'vue', page: 2 } });
// Результирующий URL: /search?q=vue&page=2
Важно помнить, что при использовании params с указанием
path необходимо соблюдать формат маршрута, иначе параметры
не будут подставлены автоматически.
Программная навигация позволяет реализовать логику перед переходом:
if (this.isLoggedIn) {
this.$router.push({ name: 'dashboard' });
} else {
this.$router.push({ name: 'login' });
}
Такой подход обеспечивает контроль доступа к страницам и динамическую маршрутизацию в зависимости от состояния приложения.
В Vue 3 с Composition API объект router можно получить
через хук useRouter:
import { useRouter } from 'vue-router';
export default {
setup() {
const router = useRouter();
const goToProfile = () => {
router.push({ name: 'profile', params: { userId: 123 } });
};
return { goToProfile };
}
};
Это позволяет удобно управлять навигацией внутри функций компонента
без обращения к this.
Попытка перейти на текущий маршрут с теми же параметрами вызовет NavigationDuplicated. Для безопасного использования рекомендуется обрабатывать ошибки:
router.push({ name: 'home' }).catch(err => {
if (err.name !== 'NavigationDuplicated') throw err;
});
beforeRouteLeave и beforeEachМетод router.push триггерит все навигационные
гварды:
beforeRouteLeave текущего компонента;router.beforeEach;beforeEnter маршрута назначения.Это позволяет выполнять проверки, отменять или перенаправлять переход на другой маршрут:
this.$router.push({ name: 'settings' });
Если глобальная гварда вернёт false, переход будет
отменён.
name + params.query.useRouter вместо this.$router.Метод router.push является ключевым инструментом
программной навигации, обеспечивая гибкий контроль маршрутов и
интеграцию с логикой компонентов.