Компонент Loading предназначен для отображения индикатора загрузки, сигнализируя пользователю о том, что выполняется асинхронная операция. В Element Plus он реализован как сервис, который может быть вызван программно, а также как директива для конкретных компонентов.
Для использования сервиса Loading необходимо импортировать его из библиотеки:
import { ElLoading } from 'element-plus';
Создание глобального индикатора загрузки осуществляется с помощью
метода ElLoading.service():
const loadingInstance = ElLoading.service({
lock: true,
text: 'Загрузка данных...',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)',
});
Параметры конфигурации:
'el-icon-loading').Для закрытия индикатора используется метод close():
loadingInstance.close();
Компонент может быть применён к конкретным элементам через директиву v-loading. Это удобно для отображения загрузки внутри определённого блока, без блокировки всей страницы:
<template>
<div v-loading="loading" class="loading-box">
Контент загружается...
</div>
</template>
<script>
import { ref } from 'vue';
export default {
setup() {
const loading = ref(true);
setTimeout(() => {
loading.value = false;
}, 3000);
return { loading };
}
}
</script>
<style>
.loading-box {
height: 200px;
border: 1px solid #dcdfe6;
position: relative;
}
</style>
Особенности директивы v-loading:
true/false) через
реактивную переменную.v-loading="loading" :loading-text="'Загрузка...'"..el-loading-mask.В Element Plus можно кастомизировать внешний вид индикатора.
Используется параметр customClass для задания собственного
CSS класса:
const loadingInstance = ElLoading.service({
customClass: 'my-loading',
text: 'Подождите, идет процесс...'
});
В CSS можно определить стиль:
.my-loading .el-loading-text {
color: #409eff;
font-size: 18px;
}
.my-loading .el-loading-spinner {
border-color: #409eff;
}
Пример с асинхронным запросом:
import { ElLoading } from 'element-plus';
import axios from 'axios';
const loadingInstance = ElLoading.service({
lock: true,
text: 'Загрузка данных...',
});
axios.get('/api/data')
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
})
.finally(() => {
loadingInstance.close();
});
В данном примере индикатор будет отображаться до завершения запроса к API.
Компонент Loading можно использовать совместно с таблицами, формами и другими контейнерами:
<el-table :data="tableData" v-loading="loading">
<el-table-column prop="name" label="Имя"></el-table-column>
<el-table-column prop="age" label="Возраст"></el-table-column>
</el-table>
При установке loading = true таблица будет покрыта
маской с индикатором загрузки.
Параметры lock, text, spinner
и background можно комбинировать с опцией
target для позиционирования:
ElLoading.service({
target: document.querySelector('.specific-container'),
text: 'Идет обработка...',
background: 'rgba(255, 255, 255, 0.6)',
});
target не указан, индикатор создается на всём
экране.Для сложных сценариев загрузки можно использовать реактивные переменные и watch-эффекты для управления индикатором:
import { ref, watch } from 'vue';
import { ElLoading } from 'element-plus';
const loading = ref(false);
let loadingInstance = null;
watch(loading, (newValue) => {
if (newValue) {
loadingInstance = ElLoading.service({ text: 'Загрузка...' });
} else {
loadingInstance?.close();
}
});
Такой подход позволяет автоматически показывать или скрывать индикатор при изменении состояния приложения.
Эффективное использование Loading в Element Plus позволяет создавать интерфейсы, где пользователь всегда видит процесс выполнения операций, улучшая взаимодействие с приложением и предотвращая случайные повторные действия.