В Quasar маршрутизация реализуется на основе Vue
Router, что позволяет создавать многостраничные приложения с
динамической загрузкой компонентов. В конфигурации Quasar проект по
умолчанию содержит файл router/index.js, где определяется
объект routes.
Каждый маршрут представляет собой объект с ключами:
path — путь URL, по которому будет доступна
страница.component — компонент Vue, который будет
отрендерен.name — уникальное имя маршрута, полезное для
программной навигации.meta — объект с дополнительными параметрами, например,
requiresAuth.Пример базового маршрута:
const routes = [
{
path: '/',
component: () => import('pages/IndexPage.vue'),
name: 'home'
},
{
path: '/about',
component: () => import('pages/AboutPage.vue'),
name: 'about'
}
]
Quasar использует стандартные методы Vue Router для переходов между страницами:
this.$router.push() — добавляет новый
маршрут в историю браузера.this.$router.replace() — заменяет
текущий маршрут без добавления новой записи в историю.this.$router.go(n) — перемещает
пользователя на n шагов вперед или назад в истории.Пример перехода к странице по имени:
this.$router.push({ name: 'about' })
Можно также передавать параметры через объект params или
query-параметры через query:
this.$router.push({ name: 'profile', params: { userId: 123 } })
this.$router.push({ path: '/search', query: { q: 'Quasar' } })
Quasar предоставляет специальные компоненты для навигации, которые интегрируются с Vue Router и поддерживают активное состояние маршрута.
q-btn и toКомпонент кнопки q-btn может быть использован для
перехода на другой маршрут с помощью свойства to:
<q-btn label="Перейти на About" :to="{ name: 'about' }" />
to поддерживает как объект маршрута, так и строку с
путем:
<q-btn label="Главная" to="/" />
q-route-tabДля создания вкладок с навигацией удобно использовать компонент
q-route-tab. Он автоматически выделяет активную вкладку на
основе текущего маршрута.
<q-tabs v-model="tab" class="text-grey bg-white">
<q-route-tab to="/" name="home" label="Главная" />
<q-route-tab to="/about" name="about" label="О проекте" />
</q-tabs>
Маршруты могут содержать динамические сегменты, обозначаемые
двоеточием :. Они позволяют передавать параметры через
URL.
{
path: '/user/:id',
component: () => import('pages/UserPage.vue'),
name: 'user'
}
В компоненте параметр можно получить через
this.$route.params.id. Для реактивного отслеживания
изменений маршрута применяется watch на
$route.
watch: {
'$route.params.id'(newId) {
this.fetchUserData(newId)
}
}
Quasar поддерживает вложенные маршруты, позволяющие создавать
иерархию страниц. Родительский маршрут содержит массив
children с дочерними маршрутами:
{
path: '/dashboard',
component: () => import('layouts/DashboardLayout.vue'),
children: [
{ path: '', component: () => import('pages/DashboardHome.vue') },
{ path: 'settings', component: () => import('pages/DashboardSettings.vue') }
]
}
При использовании вложенных маршрутов важно размещать
<router-view /> в компоненте родителя для отображения
дочерних страниц.
Quasar позволяет управлять доступом к маршрутам через глобальные, пер-роут и пер-компонент гварды.
router.beforeEach((to, from, next) => {
if (to.meta.requiresAuth && !isLoggedIn()) {
next({ name: 'login' })
} else {
next()
}
})
{
path: '/admin',
component: () => import('pages/Admin.vue'),
meta: { requiresAuth: true },
beforeEnter: (to, from, next) => {
if (!isAdmin()) next({ name: 'home' })
else next()
}
}
beforeRouteEnter,
beforeRouteUpdate и beforeRouteLeave.Quasar поддерживает ленивую загрузку страниц через динамический импорт. Это снижает размер начального бандла и ускоряет загрузку приложения:
component: () => import('pages/LazyPage.vue')
Lazy loading также может использоваться совместно с вложенными маршрутами и динамическими параметрами.
URL-параметры и query-параметры автоматически доступны через
$route.params и $route.query. Для сохранения
состояния при навигации удобно использовать
props: true:
{
path: '/post/:id',
component: () => import('pages/Post.vue'),
props: true
}
Внутри компонента Post.vue:
props: ['id']
Это делает компонент более чистым, так как доступ к параметрам не
зависит от $route.
scroll-behaviorQuasar позволяет управлять поведением прокрутки при смене маршрута
через scrollBehavior в файле маршрутизатора:
scrollBehavior(to, from, savedPosition) {
if (savedPosition) return savedPosition
return { left: 0, top: 0 }
}
Таким образом, можно сохранять позицию прокрутки при возврате на предыдущие страницы или устанавливать прокрутку на начало при переходе на новую страницу.
Сочетание программной навигации, компонентов Quasar и гибкой конфигурации Vue Router позволяет создавать сложные, многоуровневые приложения с удобной маршрутизацией, динамическими параметрами и безопасным доступом к защищенным страницам.