QAjaxBar — это компонент из фреймворка Quasar, предназначенный для отображения прогресса асинхронных операций, таких как загрузка данных с сервера или выполнение длительных вычислений. Он обычно располагается в верхней части страницы и визуально сигнализирует пользователю о том, что операция выполняется.
Компонент интегрируется с глобальными событиями и состояниями приложения, что позволяет централизованно управлять отображением индикатора загрузки.
Для использования QAjaxBar необходимо импортировать его из библиотеки:
import { QAjaxBar } from 'quasar';
В шаблоне Vue-компонента компонент подключается следующим образом:
<q-ajax-bar color="primary" position="top" :progress="loadingProgress" />
top или
bottom).Одной из ключевых особенностей QAjaxBar является возможность управления прогрессом с помощью глобального плагина LoadingBar или вручную через реактивные переменные.
Пример автоматического управления через события:
this.$q.loadingBar.start(); // запуск анимации
axios.get('/api/data')
.then(() => {
this.$q.loadingBar.stop(); // завершение анимации
})
.catch(() => {
this.$q.loadingBar.stop(); // завершение при ошибке
});
Методы LoadingBar:
start() — начинает отображение индикатора.stop() — завершает индикатор и скрывает его.increment(amount) — увеличивает текущий прогресс на
указанное значение (0–1).set(value) — устанавливает конкретное значение
прогресса (0–1).QAjaxBar предоставляет гибкие настройки внешнего вида:
primary, secondary,
accent) или произвольные CSS-цвета.size="4px".top или bottom.Пример с кастомными параметрами:
<q-ajax-bar color="red" size="6px" position="bottom" />
Для отображения прогресса при загрузке данных через axios можно использовать интерцепторы:
import axios from 'axios';
axios.interceptors.request.use(config => {
this.$q.loadingBar.start();
return config;
});
axios.interceptors.response.use(response => {
this.$q.loadingBar.stop();
return response;
}, error => {
this.$q.loadingBar.stop();
return Promise.reject(error);
});
Такой подход позволяет автоматически показывать индикатор при любом сетевом запросе без дополнительного кода в каждом методе.
Можно управлять прогрессом вручную через реактивное свойство
loadingProgress:
data() {
return {
loadingProgress: 0
}
},
methods: {
simulateProgress() {
this.loadingProgress = 0;
const interval = setInterval(() => {
if (this.loadingProgress >= 100) {
clearInterval(interval);
} else {
this.loadingProgress += 10;
}
}, 200);
}
}
В шаблоне:
<q-ajax-bar color="green" :progress="loadingProgress" position="top" />
<q-btn label="Start" @click="simulateProgress" />
start и
stop, а не напрямую через DOM, чтобы сохранить
реактивность.QAjaxBar хорошо комбинируется с компонентами QLayout и QPageContainer, позволяя закрепить индикатор поверх всего контента:
<q-layout view="lHh Lpr lFf">
<q-header elevated>
<q-toolbar>
<q-toolbar-title>Приложение</q-toolbar-title>
</q-toolbar>
</q-header>
<q-page-container>
<q-page padding>
<q-ajax-bar color="primary" />
<q-btn label="Load Data" @click="fetchData" />
</q-page>
</q-page-container>
</q-layout>
Индикатор автоматически подстраивается под текущую тему Quasar. Цвета
primary, secondary и accent
адаптируются к светлой или темной теме, обеспечивая гармоничный
визуальный стиль.
Эти возможности делают QAjaxBar удобным инструментом для создания современных, отзывчивых интерфейсов с информативной обратной связью пользователю о загрузке данных.