Маршрутизация в Quasar строится поверх Vue Router,
что обеспечивает тесную интеграцию с экосистемой Vue.js. Основной объект
маршрутизации создается в файле src/router/routes.js или
src/router/index.js, в зависимости от структуры проекта.
Маршруты определяются как массив объектов с ключевыми свойствами:
path, component, name,
meta и children.
const routes = [
{
path: '/',
component: () => import('layouts/MainLayout.vue'),
children: [
{ path: '', component: () => import('pages/IndexPage.vue'), name: 'home' },
{ path: 'about', component: () => import('pages/AboutPage.vue'), name: 'about' }
]
},
{
path: '/login',
component: () => import('pages/LoginPage.vue'),
name: 'login'
},
{
path: '/:catchAll(.*)*',
component: () => import('pages/ErrorNotFound.vue')
}
]
export default routes
Ключевые моменты:
path определяет URL, по которому будет доступен
маршрут.component указывает компонент, который будет отображен
при переходе по маршруту. Использование ленивой загрузки через
import() уменьшает первоначальный размер бандла.children позволяет создавать вложенные маршруты,
которые отображаются внутри <router-view>
родительского компонента.meta используется для хранения произвольных данных
маршрута, например, прав доступа или названия страницы.Quasar поддерживает динамические сегменты URL с помощью двоеточия
(:). Они позволяют передавать параметры в компоненты.
{
path: '/user/:id',
component: () => import('pages/UserProfile.vue'),
name: 'user-profile',
props: true
}
:id — динамический сегмент, доступный в компоненте
через props или через $route.params.id.props: true автоматически передает параметры
маршрута как свойства в компонент./user/:id(\\d+) — только цифры.Для сложных приложений часто требуется несколько уровней вложенных маршрутов:
{
path: '/dashboard',
component: () => import('layouts/DashboardLayout.vue'),
children: [
{
path: 'analytics',
component: () => import('pages/dashboard/Analytics.vue'),
children: [
{ path: 'daily', component: () => import('pages/dashboard/analytics/Daily.vue') },
{ path: 'monthly', component: () => import('pages/dashboard/analytics/Monthly.vue') }
]
}
]
}
<router-view> в родительском компоненте.name помогают строить навигацию с использованием
router.push({ name: 'route-name' }).Объект meta служит для хранения дополнительных
данных:
{
path: '/admin',
component: () => import('pages/Admin.vue'),
meta: { requiresAuth: true, role: 'admin' }
}
requiresAuth можно использовать в navigation
guards для проверки авторизации перед переходом.role позволяет реализовать контроль доступа по ролям
пользователей.meta доступны через
$route.meta.Quasar использует стандартные методы Vue Router:
this.$router.push({ name: 'about' })
this.$router.replace('/login')
this.$router.go(-1)
push добавляет новый маршрут в историю браузера.replace заменяет текущий маршрут без добавления в
историю.go(n) позволяет перемещаться по истории назад или
вперед.Для оптимизации загрузки больших приложений рекомендуется использовать ленивую загрузку компонентов:
{
path: '/settings',
component: () => import('pages/Settings.vue')
}
Navigation guards позволяют выполнять проверки перед переходом на маршрут:
router.beforeEach((to, from, next) => {
if (to.meta.requiresAuth && !store.getters.isLoggedIn) {
next({ name: 'login' })
} else {
next()
}
})
beforeEach срабатывает перед каждым переходом.next() управляет продолжением навигации.Для обработки неизвестных маршрутов используется “catch-all”:
{
path: '/:catchAll(.*)*',
component: () => import('pages/ErrorNotFound.vue')
}
redirect:{ path: '/home', redirect: '/' }
Маршрутизация в Quasar сочетает гибкость Vue Router с возможностями SPA: вложенные маршруты, динамические параметры, ленивую загрузку, метаданные и guards. Такой подход позволяет строить масштабируемые и управляемые приложения с минимальными усилиями.