$q.addressbarColor
В более новых мобильных браузерах есть возможность задать цвет адресной строки, как показано на изображении ниже.
import { AddressbarColor } from 'quasar'
export default () => {
AddressbarColor.set('#a2e3fa')
}
$q.fullscreen
$q.fullscreen — это плагин Quasar, который предоставляет методы для управления полноэкранным режимом браузера.
Вот основные возможности $q.fullscreen:
- Проверка поддержки: Определяет, поддерживает ли браузер полноэкранный режим.
- Вход в полноэкранный режим: Позволяет перевести всё приложение или определённый DOM-элемент в полноэкранный режим.
- Выход из полноэкранного режима: Завершает полноэкранный режим.
- Проверка состояния: Позволяет проверить, находится ли приложение/элемент в полноэкранном режиме.
import { useQuasar } from 'quasar'
setup () {
const $q = useQuasar()
// Requesting fullscreen mode:
$q.fullscreen.request()
.then(() => {
// success!
})
.catch(err => {
// oh, no!!!
})
// Exiting fullscreen mode:
$q.fullscreen.exit()
.then(() => {
// success!
})
.catch(err => {
// oh, no!!!
})
}
$q.appVisible
$q.appVisible — это свойство в Quasar, которое показывает, видно ли приложение пользователю в данный момент. Оно возвращает true, если вкладка с приложением активна и видима пользователю, и false, если вкладка свёрнута или открыта другая вкладка (то есть приложение не в фокусе).
import { AppVisibility } from 'quasar'
AppVisibility.appVisible // Boolean
// inside of a Vue file
import { useQuasar } from 'quasar'
setup () {
const $q = useQuasar()
// now use $q.appVisible (Boolean)
}
$q.bottomSheet
$q.bottomSheet — это плагин в Quasar, который позволяет отображать модальные окна в виде листа (sheet), появляющегося снизу экрана. Это популярный UI-паттерн, особенно в мобильных приложениях.
import { BottomSheet } from 'quasar'
BottomSheet.create({ ... }) // returns Object
// inside of a Vue file
import { useQuasar } from 'quasar'
setup () {
const $q = useQuasar()
$q.bottomSheet({ ... }) // returns Object
}
Brand
brand позволяет задать свои собственные цвета для ключевых элементов интерфейса, таких как:
primary: основной цвет (например, кнопки, акцентные элементы)secondary: вторичный цветaccent: акцентный цветpositive: цвет для позитивных действий (например, "успех")negative: цвет для ошибокinfo: информационный цветwarning: цвет предупреждений
Эти цвета будут автоматически использоваться компонентами Quasar, если вы используете их стандартные названия (например, color="primary" на кнопке).
app.use(Quasar, {
config: {
brand: {
primary: '#1976D2',
secondary: '#26A69A',
accent: '#9C27B0',
positive: '#21BA45',
negative: '#C10015',
info: '#31CCEC',
warning: '#F2C037'
}
}
});
v-close-popup
Директива v-close-popup в Quasar используется для закрытия всплывающих окон (popups), таких как:
- QDialog
- QMenu
- QTooltip
- QSelect (внутри него)
- И другие компоненты, реализующие функцию "popup"
Принцип работы:
Когда элемент, на котором установлена директива v-close-popup, получает событие click, вызывается команда закрытия ближайшего родительского popup-компонента (например, диалога или меню).
# v-close-popup # v-close-popup="booleanState" # v-close-popup="-1" # v-close-popup="2"
$q.cookies
$q.cookies — это плагин Quasar, который предоставляет удобный способ работы с HTTP cookies в вашем приложении.
Он позволяет:
- Устанавливать, читать и удалять cookies.
- Управлять параметрами cookies (например, срок жизни, домен, безопасность).
- Работать как с простыми строками, так и с JSON-объектами.
import { Cookies } from 'quasar'
const value = Cookies.get('cookie_name')
const cookies = Cookies.getAll()
Cookies.has('cookie_name') // Boolean
Cookies.set('cookie_name', cookie_value)
$q.dark
$q.dark — это плагин Quasar, который позволяет управлять темной темой в приложении. Он предоставляет возможность программно включать/выключать темный режим и отслеживать его текущее состояние.
import { useQuasar } from 'quasar'
setup () {
const $q = useQuasar()
// get status
console.log($q.dark.isActive) // true, false
// get configured status
console.log($q.dark.mode) // "auto", true, false
// set status
$q.dark.set(true) // or false or "auto"
// toggle
$q.dark.toggle()
}
$q.dialog
$q.dialog — это плагин Quasar, позволяющий динамически создавать и отображать модальные диалоговые окна (всплывающие сообщения). Это удобно, когда вам нужно показать пользователю информацию, получить подтверждение или показать выбор, но вы не хотите заранее размещать QDialog в шаблоне.
С точки зрения пользовательского интерфейса, диалоговые окна можно рассматривать как разновидность плавающих модальных окон, которые занимают лишь часть экрана. Это означает, что диалоговые окна следует использовать только для быстрых действий пользователя.
this.$q.dialog({
title: 'Информация',
message: 'Это простое сообщение.'
});
/**/
this.$q.dialog({
title: 'Подтверждение',
message: 'Вы уверены?',
cancel: true, // Показать кнопку отмены
persistent: true // Запретить закрытие кликом вне диалога
}).onOk(() => {
console.log('OK');
}).onCancel(() => {
console.log('Отмена');
});
/**/
this.$q.dialog({
title: 'Выбор действия',
message: 'Что вы хотите сделать?',
options: {
type: 'radio',
model: 'option1',
items: [
{ label: 'Опция 1', value: 'option1', color: 'secondary' },
{ label: 'Опция 2', value: 'option2', color: 'secondary' }
]
},
cancel: true,
persistent: false
}).onOk(data => {
console.log('Выбрано:', data);
});
/**/
this.$q.dialog({
title: 'Введите имя',
prompt: {
model: '',
type: 'text'
},
cancel: true
}).onOk(data => {
console.log('Введено:', data);
});
$q.iconSet
$q.iconSet — это плагин Quasar, который позволяет получить информацию о текущем наборе иконок (иконсет) и использовать его в вашем приложении. Это может быть полезно, если вы хотите динамически использовать иконки, соответствующие выбранному иконсету (Material Icons, Font Awesome, Ionicons и т.д.).
framework: {
// webfont-based example
iconSet: 'mdi-v7'
}
// использование в проекте
const homeIcon = this.$q.iconSet.set.home; // например: 'mdi-home'
console.log(homeIcon); // выведет: 'mdi-home'
<template>
<div>
<q-icon :name="homeIcon" size="32px" />
<q-btn :icon="$q.iconSet.set.account" label="Профиль" />
</div>
</template>
v-intersection
v-intersection — это директива в Quasar, которая позволяет отслеживать, появляется ли элемент на экране (в области видимости). Это полезно для:
- Lazy loading (ленивая загрузка изображений или контента)
- Отслеживания просмотров элементов (analytics)
- Анимаций при появлении элементов
- Подгрузки данных при скролле
<template>
<div v-intersection="onIntersection">
Я буду отслеживаться на предмет появления в области видимости
</div>
</template>
<script setup>
function onIntersection(entry) {
if (entry.isIntersecting) {
console.log('Элемент появился на экране!');
} else {
console.log('Элемент исчез из области видимости');
}
}
</script>
$q.lang
$q.lang — это плагин Quasar, который предоставляет информацию о текущем языке (локали), используемом в приложении, а также позволяет управлять языковыми настройками.
Получение текущего языка:
console.log(this.$q.lang.isoName); // например: 'ru-RU'
console.log(this.$q.lang.rtl); // true или false
Установка языка:
import { langRu } from 'quasar/lang/ru';
// или
import ru from 'quasar/lang/ru';
this.$q.lang.set(ru);
Использование в шаблоне:
<template>
<div>
<p>Текущий язык: {{ $q.lang.isoName }}</p>
<p>RTL: {{ $q.lang.rtl }}</p>
</div>
</template>
Пример динамической смены языка:
<script setup>
import { ref } from 'vue';
import langEn from 'quasar/lang/en-US';
import langRu from 'quasar/lang/ru';
const currentLang = ref($q.lang.isoName);
function changeLanguage(langCode) {
if (langCode === 'ru') {
$q.lang.set(langRu);
currentLang.value = 'ru-RU';
} else {
$q.lang.set(langEn);
currentLang.value = 'en-US';
}
}
</script>
<template>
<q-select
v-model="currentLang"
:options="['en-US', 'ru-RU']"
@update:model-value="changeLanguage"
/>
</template>
Полезно знать:
$q.langвлияет на переводы компонентов Quasar (например, кнопки "Cancel", "OK", плейсхолдеры, форматирование дат и чисел).- Языковые файлы нужно импортировать вручную, если вы меняете язык динамически.
- Поддерживаются все языки, для которых существуют языковые файлы в Quasar (см. директорию
node_modules/quasar/lang/).
Пример с переводом компонентов:
<template>
<q-input
v-model="inputValue"
:placeholder="$q.lang.label.clear" // Перевод "Clear"
/>
</template>
$q.loading
$q.loading — это плагин Quasar, который предоставляет глобальный индикатор загрузки (loading spinner), который можно показывать/скрывать в любое время в приложении. Это удобно для отображения процесса загрузки данных, выполнения длительных операций и т.д.
const $q = useQuasar()
$q.loading.show();
$q.loading.hide()
$q.loading.show({
delay: 400, // Задержка перед показом (мс)
message: 'Загрузка...', // Текст сообщения
spinnerSize: 80, // Размер спиннера (число)
spinnerColor: 'amber', // Цвет спиннера (согласно цветам Quasar)
backgroundColor: 'black',
messageColor: 'white'
});
$q.loadingBar
$q.loadingBar — это плагин Quasar, который предоставляет верхнюю полосу загрузки (top progress bar), аналогичную той, что используется в SPA-приложениях (например, в NProgress). Он показывает прогресс выполнения операции и часто используется при навигации между страницами или во время загрузки данных.
import { useQuasar } from 'quasar'
setup () {
const $q = useQuasar()
$q.loadingBar.start()
$q.loadingBar.stop()
$q.loadingBar.increment(value)
$q.loadingBar.set(0.3);
}
Пример с API-запросом:
<script setup>
async function fetchData() {
$q.loadingBar.start();
try {
const response = await fetch('/api/data');
const data = await response.json();
console.log(data);
} catch (error) {
console.error(error);
} finally {
$q.loadingBar.stop();
}
}
</script>
<template>
<q-btn @click="fetchData" label="Загрузить данные" />
</template>
$q.localStorage
$q.localStorage — это плагин Quasar, который предоставляет удобный и безопасный способ работы с localStorage браузера. Он позволяет сохранять, читать и удалять данные в локальном хранилище, автоматически сериализуя и десериализуя JSON-объекты.
import { useQuasar } from 'quasar'
setup () {
const $q = useQuasar()
$q.localStorage.set(key, value)
const value = $q.localStorage.getItem(key)
$q.sessionStorage.set(key, value)
const otherValue = $q.sessionStorage.getItem(key)
}
Для обеспечения надежности при установке значения лучше всего также отслеживать любые потенциальные ошибки, возникающие в базовом веб-API локального/сессионного хранилища, например, при превышении квоты:
try {
$q.localStorage.set(key, value)
} catch (e) {
// data wasn't successfully saved due to
// a Web Storage API error
}
Quasar Meta Plugin (Meta)
Quasar Meta Plugin (Meta) — это плагин Quasar, который позволяет динамически управлять мета-данными HTML-страницы (теги <head>), такие как:
<title><meta><link><style><script>
Это особенно полезно в SPA (Single Page Applications), где контент страницы меняется динамически, и нужно обновлять заголовок, SEO-метатеги, Open Graph и другие теги без перезагрузки страницы.
Структура объекта мета:
| Поле | Описание |
|---|---|
title |
Заголовок страницы |
titleTemplate |
Шаблон заголовка (например, %s - Мой сайт) |
meta |
Объект с мета-тегами |
link |
Объект с тегами <link> (например, canonical, favicon) |
script |
Объект с тегами <script> |
style |
Объект с тегами <style> |
htmlAttr |
Атрибуты для <html> |
bodyAttr |
Атрибуты для <body> |
<script setup>
import { onMounted } from 'vue';
import { useMeta } from 'quasar';
onMounted(() => {
useMeta({
title: 'Динамический заголовок',
meta: {
description: { name: 'description', content: 'Описание' }
}
});
});
</script>
import { useMeta } from 'quasar'
const metaData = {
// sets document title
title: 'Index Page',
// optional; sets final title as "Index Page - My Website", useful for multiple level meta
titleTemplate: title => `${title} - My Website`,
// meta tags
meta: {
description: { name: 'description', content: 'Page 1' },
keywords: { name: 'keywords', content: 'Quasar website' },
equiv: { 'http-equiv': 'Content-Type', content: 'text/html; charset=UTF-8' },
// note: for Open Graph type metadata you will need to use SSR, to ensure page is rendered by the server
ogTitle: {
property: 'og:title',
// optional; similar to titleTemplate, but allows templating with other meta properties
template (ogTitle) {
return `${ogTitle} - My Website`
}
}
},
// CSS tags
link: {
material: { rel: 'stylesheet', href: 'https://fonts.googleapis.com/icon?family=Material+Icons' }
},
// JS tags
script: {
ldJson: {
type: 'application/ld+json',
innerHTML: `{ "@context": "http://schema.org" }`
}
},
// <html> attributes
htmlAttr: {
'xmlns:cc': 'http://creativecommons.org/ns#', // generates <html xmlns:cc="http://creativecommons.org/ns#">,
empty: undefined // generates <html empty>
},
// <body> attributes
bodyAttr: {
'action-scope': 'xyz', // generates <body action-scope="xyz">
empty: undefined // generates <body empty>
},
// <noscript> tags
noscript: {
default: 'This is content for browsers with no JS (or disabled JS)'
}
}
export default {
setup () {
// needs to be called in setup()
useMeta(metaData)
}
}
Важно:
Metaработает только в клиентской части (CSR).- Изменения применяются к тегу
<head>документа. - Подходит для SEO и социальных сетей (Open Graph, Twitter Card и т.д.).
- Очень полезен в связке с Vue Router для динамических заголовков и мета-тегов.
Morph
Morph — это плагин Quasar, который позволяет плавно анимировать изменение DOM-структур между двумя состояниями. Он особенно полезен, когда вы хотите анимировать:
- Переход от одной разметки к другой (например, при сортировке списка, изменении макета и т.д.)
- Изменение позиций, размеров, стилей элементов
- Анимации при добавлении/удалении элементов
Morph использует алгоритм "morphing" (деформации), чтобы плавно преобразовать один набор DOM-элементов в другой.
Параметры morph():
| Параметр | Тип | Описание |
|---|---|---|
from |
Element | Исходный DOM-элемент |
to |
Element | Целевой DOM-элемент |
duration |
Number | Длительность анимации (по умолчанию 300 мс) |
easing |
String | Функция плавности (например, ease-out) |
onMorphStart |
Function | Коллбэк при начале анимации |
onMorphEnd |
Function | Коллбэк при завершении анимации |
Пример с анимацией списка:
<template>
<div>
<q-btn @click="shuffleItems" label="Перемешать" />
<div ref="listContainer">
<div v-for="item in items" :key="item.id" class="list-item">
{{ item.label }}
</div>
</div>
</div>
</template>
<script setup>
import { ref, nextTick } from 'vue';
import { $q } from 'quasar';
const items = ref([
{ id: 1, label: 'A' },
{ id: 2, label: 'B' },
{ id: 3, label: 'C' },
{ id: 4, label: 'D' }
]);
const listContainer = ref(null);
async function shuffleItems() {
// Перемешиваем массив
items.value.sort(() => Math.random() - 0.5);
await nextTick();
$q.morph({
from: listContainer.value,
duration: 500,
easing: 'ease-in-out'
});
}
</script>
Mutation
Mutation — это плагин Quasar, который предоставляет удобный способ отслеживания изменений в DOM (добавление, удаление, изменение атрибутов и т.д.) с помощью API MutationObserver.
<template>
<div ref="targetRef">
<p>Этот элемент будет отслеживаться</p>
<button @click="addItem">Добавить элемент</button>
<div v-for="(item, i) in items" :key="i">{{ item }}</div>
</div>
</template>
<script setup>
import { ref, onMounted, onUnmounted } from 'vue';
import { $q } from 'quasar';
const targetRef = ref(null);
const items = ref(['Item 1']);
let observerHandle = null;
onMounted(() => {
observerHandle = $q.mutation.observe(
targetRef.value,
(mutations) => {
mutations.forEach(mutation => {
if (mutation.type === 'childList') {
console.log('Изменён список детей:', mutation.addedNodes.length, 'добавлено');
}
});
},
{
childList: true,
subtree: true
}
);
});
function addItem() {
items.value.push(`Item ${items.value.length + 1}`);
}
onUnmounted(() => {
if (observerHandle) {
$q.mutation.stop(observerHandle);
}
});
</script>
$q.notify
$q.notify — это плагин Quasar, который позволяет показывать всплывающие уведомления (notifications) пользователю. Это удобный способ информировать пользователя о каких-либо событиях: успешных действиях, ошибках, предупреждениях и т.д.
<template>
<q-btn @click="showSimpleNotification" label="Простое уведомление" />
</template>
<script setup>
import { useQuasar } from 'quasar';
const $q = useQuasar();
function showSimpleNotification() {
$q.notify('Простое уведомление');
}
</script>
$q.platform
$q.platform — это плагин Quasar, который предоставляет информацию о платформе, на которой запущено приложение: браузер, операционная система, устройство и т.д. Это полезно для адаптации интерфейса или логики под конкретную платформу (например, мобильное приложение vs. десктоп).
<template>
<div>
<p>Платформа: {{ platformInfo }}</p>
<p v-if="isMobile">Вы используете мобильное устройство</p>
</div>
</template>
<script setup>
import { computed } from 'vue';
import { useQuasar } from 'quasar';
const $q = useQuasar();
const platformInfo = computed(() => {
if ($q.platform.is.ios) return 'iOS';
if ($q.platform.is.android) return 'Android';
if ($q.platform.is.win) return 'Windows';
if ($q.platform.is.mac) return 'macOS';
return 'Другая платформа';
});
const isMobile = computed(() => $q.platform.is.mobile);
</script>