Компонент Loading в Carbon Components Svelte предназначен для отображения индикатора активности во время загрузки данных или выполнения асинхронных операций. Для полноэкранного применения он обеспечивает блокировку взаимодействия с интерфейсом и визуальную индикацию состояния загрузки.
Для использования компонента необходимо установить пакет
carbon-components-svelte:
npm install carbon-components-svelte
Затем в Svelte-файле импортируется компонент
Loading:
<script>
import { Loading } from 'carbon-components-svelte';
let isLoading = true;
</script>
Компонент Loading поддерживает два режима
отображения:
Для полноэкранного режима используется свойство
fullscreen:
<Loading fullscreen bind:active={isLoading} description="Загрузка данных..." />
Ключевые свойства:
active — булево значение, определяющее, видим ли
индикатор.fullscreen — переключает режим на полноэкранный.description — текст под индикатором.withOverlay — добавляет затемнённый фон поверх
интерфейса.size — задаёт размер индикатора (small,
medium, large).В реальных проектах состояние загрузки обычно зависит от асинхронных операций. Например, загрузка данных с сервера:
<script>
import { onMount } from 'svelte';
import { Loading } from 'carbon-components-svelte';
let isLoading = true;
let data = [];
onMount(async () => {
try {
const response = await fetch('https://api.example.com/items');
data = await response.json();
} catch (error) {
console.error('Ошибка загрузки данных:', error);
} finally {
isLoading = false;
}
});
</script>
<Loading fullscreen bind:active={isLoading} description="Загрузка данных..." />
{#if !isLoading}
<ul>
{#each data as item}
<li>{item.name}</li>
{/each}
</ul>
{/if}
Здесь bind:active связывает видимость компонента с
переменной isLoading, что обеспечивает автоматическое
отображение и скрытие индикатора.
Размер и цвет
Свойство size позволяет выбрать визуальный масштаб:
<Loading fullscreen bind:active={isLoading} size="large" />
Цвет индикатора и overlay можно настраивать через CSS-переменные Carbon:
:global(.bx--loading__svg) {
stroke: #0f62fe;
}
:global(.bx--loading-overlay) {
background-color: rgba(0, 0, 0, 0.5);
}
Описание и локализация
Текст под индикатором передаётся через description. Для
поддержки разных языков можно динамически обновлять значение:
<Loading fullscreen bind:active={isLoading} description={loadingText} />
<script>
let loadingText = "Загрузка...";
</script>
Полноэкранный индикатор хорошо сочетается с Modal и
DataTable. При открытии модального окна или загрузке
таблицы можно автоматически активировать Loading:
<Modal bind:open={isModalOpen}>
{#if isLoading}
<Loading fullscreen description="Подготовка данных..." />
{/if}
<DataTable {data} />
</Modal>
fullscreen только для критичных процессов,
которые блокируют всю работу с интерфейсом.Loading.description), чтобы
пользователь понимал причину ожидания.Можно создать компонент-обёртку для централизованного управления состоянием загрузки:
<script>
import { Loading } from 'carbon-components-svelte';
export let loading = false;
export let message = "Пожалуйста, подождите...";
</script>
<Loading fullscreen bind:active={loading} description={message} withOverlay />
<slot />
Это позволяет использовать один компонент AppLoader в
разных местах приложения, передавая состояние загрузки и описание
динамически.
Хотите, я могу подготовить подробный разбор анимации и кастомных индикаторов загрузки с Carbon Svelte, чтобы сделать страницу более живой и отзывчивой?