Quasar — это фреймворк на базе Vue.js, который обеспечивает создание высокопроизводительных веб- и мобильных приложений с использованием единой кодовой базы. Архитектура компонента в Quasar наследует принципы Vue, но добавляет специфические механизмы для работы с UI, состоянием и маршрутизацией.
Компонент Quasar состоит из трёх основных блоков:
Шаблон (template) Определяет визуальную часть
компонента. Использует стандартный синтаксис Vue с директивами
v-if, v-for, v-model и другими. В
Quasar шаблон активно взаимодействует с компонентами UI библиотеки,
такими как QButton, QInput,
QCard.
Пример:
<template>
<q-card>
<q-card-section>
<div class="text-h6">{{ title }}</div>
<p>{{ description }}</p>
</q-card-section>
<q-card-actions align="right">
<q-btn label="Подробнее" color="primary" @click="showDetails" />
</q-card-actions>
</q-card>
</template>Скрипт (script) Отвечает за логику компонента: реактивные данные, методы, вычисляемые свойства и жизненный цикл. Quasar поддерживает Composition API и Options API, что позволяет выбирать наиболее удобный стиль организации кода.
Пример с Composition API:
<script setup>
import { ref } from 'vue';
const title = ref('Заголовок карточки');
const description = ref('Краткое описание карточки');
function showDetails() {
console.log('Показать детали');
}
</script>Стили (style) Могут быть глобальными или локальными, поддерживаются CSS, SCSS, Stylus. Quasar рекомендует использовать Scoped стили для компонентов, чтобы избежать конфликтов.
Пример:
<style scoped>
.text-h6 {
font-weight: 600;
}
</style>Quasar полностью наследует реактивность Vue. Основные инструменты управления состоянием:
Пример:
<script setup>
import { ref, computed, watch } from 'vue';
const count = ref(0);
const doubleCount = computed(() => count.value * 2);
watch(count, (newVal, oldVal) => {
console.log(`Значение изменилось с ${oldVal} на ${newVal}`);
});
</script>
Quasar активно использует слоты для передачи динамического содержимого в компоненты. Слоты позволяют создавать высоко параметризуемые компоненты без жёсткой привязки к конкретному содержимому.
Пример использования слота в QCard:
<q-card>
<q-card-section>
<slot name="header"></slot>
<slot></slot>
</q-card-section>
</q-card>
Компонент-родитель может передавать содержимое:
<MyCard>
<template #header>
<h3>Заголовок карточки</h3>
</template>
Основное содержимое карточки.
</MyCard>
Компоненты Quasar используют стандартный механизм Vue для работы с
событиями: @click, @input,
@update:modelValue и т.д.
emit:<script setup>
import { defineEmits } from 'vue';
const emit = defineEmits(['submit']);
function handleSubmit() {
emit('submit', { message: 'Данные отправлены' });
}
</script>
<MyForm @submit="onFormSubmit" />
Компоненты могут напрямую использовать плагины Quasar для расширенной функциональности:
Пример использования Notify:
<script setup>
import { Notify } from 'quasar';
function showNotification() {
Notify.create({
message: 'Операция выполнена успешно',
color: 'positive',
position: 'top'
});
}
</script>
Quasar поддерживает ленивую загрузку компонентов для оптимизации
производительности. Используется синтаксис
defineAsyncComponent:
<script setup>
import { defineAsyncComponent } from 'vue';
const LazyComponent = defineAsyncComponent(() =>
import('./components/LazyComponent.vue')
);
</script>
<template>
<component :is="LazyComponent" />
</template>
Компоненты Quasar легко интегрируются с Vue Router. Основные моменты:
<router-link> для переходов между
страницами.useRoute и навигация через
useRouter.Пример:
<script setup>
import { useRouter } from 'vue-router';
const router = useRouter();
function goToHome() {
router.push({ name: 'home' });
}
</script>
Для крупных приложений важно следить за:
Архитектура компонента в Quasar строится на принципах модульности, реактивности и переиспользуемости. Компоненты легко интегрируются с плагинами и маршрутами, что позволяет создавать сложные интерфейсы с минимальной сложностью управления состоянием и логикой.