В Quasar навигация основана на использовании Vue Router,
что позволяет управлять переходами между страницами и маршрутами как
декларативно, так и программно. Программная навигация необходима, когда
переходы должны происходить по событиям, вычисляемым данным или после
выполнения асинхронных операций.
Quasar использует стандартные методы Vue Router:
this.$router.push() — добавляет
новый маршрут в историю браузера и выполняет переход.
this.$router.push({ name: 'home' });
this.$router.push({ path: '/profile/123' });
Можно передавать объект с параметрами:
this.$router.push({ name: 'profile', params: { userId: 123 } });this.$router.replace() — заменяет
текущий маршрут, не добавляя его в историю. Полезно для редиректов после
авторизации.
this.$router.replace({ name: 'dashboard' });this.$router.go() — позволяет
перемещаться по истории браузера.
this.$router.go(-1); // назад на одну страницу
this.$router.go(2); // вперед на две страницыДля сценариев, где требуется дождаться загрузки данных, программная навигация может вызываться после завершения асинхронных операций:
async fetchDataAndNavigate() {
try {
const data = await api.getUserData();
if (data.isAdmin) {
this.$router.push({ name: 'adminDashboard' });
} else {
this.$router.push({ name: 'userDashboard' });
}
} catch (err) {
console.error(err);
this.$router.push({ name: 'errorPage' });
}
}
Использование async/await обеспечивает последовательное
выполнение операций и гарантирует, что навигация произойдет только после
получения данных.
При программной навигации часто необходимо передавать параметры маршрута или query-параметры:
Параметры маршрута (params) — применяются для динамических сегментов пути.
this.$router.push({ name: 'profile', params: { userId: 42 } });
В роутере путь должен быть настроен как
/profile/:userId.
Query-параметры — передаются через URL после
?.
this.$router.push({ path: '/search', query: { q: 'vue' } });
На странице /search?q=vue их можно получить через
this.$route.query.q.
В Quasar с Vue 3 удобно использовать useRouter из
Composition API:
import { useRouter } from 'vue-router';
export default {
setup() {
const router = useRouter();
function goToProfile(userId) {
router.push({ name: 'profile', params: { userId } });
}
return { goToProfile };
}
}
Это позволяет использовать навигацию вне компонентов, созданных через
this, и упрощает тестирование.
Программная навигация может вызвать ошибку, если маршрут недоступен или неверно задан. Обработка ошибок важна для стабильности приложения:
this.$router.push({ name: 'nonExistent' }).catch(err => {
console.warn('Ошибка навигации:', err);
});
Абсолютный путь — начинается с /,
игнорирует текущий маршрут.
this.$router.push('/dashboard');Относительный путь — строится относительно текущего маршрута.
this.$router.push('settings'); // если текущий путь /dashboard, перейдет на /dashboard/settingsМногие компоненты Quasar поддерживают навигацию через проп
to, аналогично <router-link>:
<q-btn label="Профиль" :to="{ name: 'profile', params: { userId: 123 } }" />
<q-item clickable :to="{ path: '/settings' }">Настройки</q-item>
Программная навигация позволяет управлять переходами там, где
декларативное использование to невозможно, например, после
выполнения сложной логики или в колбэках событий.
Quasar и Vue Router позволяют передавать состояние вместе с маршрутом
через state:
this.$router.push({ name: 'checkout', state: { cart: currentCart } });
Доступ к состоянию на новой странице осуществляется через
window.history.state или через
this.$route.state.
Для контроля доступа часто используют навигационные охранники
(navigation guards), которые можно сочетать с программной
навигацией:
router.beforeEach((to, from, next) => {
if (to.meta.requiresAuth && !isLoggedIn()) {
next({ name: 'login' });
} else {
next();
}
});
Внутри компонентов, после проверки прав пользователя, можно программно перенаправлять на нужный маршрут, что обеспечивает гибкость в управлении доступом.
push для обычной навигации,
replace — для редиректов..catch(), чтобы
предотвратить исключения.params) для
динамических сегментов и query-параметры для фильтров и поисковых
запросов.useRouter) для функций,
вынесенных за пределы компонентов.Программная навигация в Quasar обеспечивает полный контроль над переходами, позволяет интегрировать сложную бизнес-логику и работать с асинхронными данными, создавая плавный и предсказуемый пользовательский опыт.