Компонент Loading Bar в библиотеке Naive UI предназначен для визуализации процесса загрузки или выполнения длительных операций в интерфейсе. Он отображается в виде тонкой горизонтальной полосы, обычно расположенной в верхней части экрана, и может быть как индикатором прогресса, так и индикатором состояния. Основные свойства компонента обеспечивают гибкость его использования и позволяют интегрировать его в любое веб-приложение на Vue.js.
import { NLoadingBarProvider, useLoadingBar } from 'naive-ui'
Для глобального управления Loading Bar используется NLoadingBarProvider, который оборачивает корневой компонент приложения. Провайдер создаёт контекст, через который можно программно управлять отображением полосы загрузки.
<template>
<n-loading-bar-provider>
<App />
</n-loading-bar-provider>
</template>
После этого любой компонент может получить доступ к API Loading Bar
через хук useLoadingBar.
const loadingBar = useLoadingBar()
Пример последовательного использования:
loadingBar.start()
setTimeout(() => {
loadingBar.update(50)
}, 1000)
setTimeout(() => {
loadingBar.finish()
}, 2000)
Компонент предоставляет свойства для тонкой настройки визуального стиля:
top.Пример с кастомизацией:
<n-loading-bar-provider :height="4" color="#42b983" failed-color="#f56c6c">
<App />
</n-loading-bar-provider>
Одна из ключевых практик — использование Loading Bar при навигации между страницами в Vue Router. Это создаёт ощущение отзывчивого интерфейса и информирует пользователя о загрузке нового контента.
import { useLoadingBar } from 'naive-ui'
import router from './router'
const loadingBar = useLoadingBar()
router.beforeEach((to, from, next) => {
loadingBar.start()
next()
})
router.afterEach(() => {
loadingBar.finish()
})
Для асинхронных операций можно использовать try…catch и
вызывать error() при возникновении исключений:
try {
await fetchData()
loadingBar.finish()
} catch {
loadingBar.error()
}
Loading Bar часто применяется совместно с кнопками или формами для отображения состояния загрузки данных. Например, при отправке формы можно включить индикатор до получения ответа сервера:
<template>
<n-button @click="submitForm" :loading="isSubmitting">Отправить</n-button>
</template>
<script setup>
import { ref } from 'vue'
import { useLoadingBar } from 'naive-ui'
const isSubmitting = ref(false)
const loadingBar = useLoadingBar()
const submitForm = async () => {
isSubmitting.value = true
loadingBar.start()
try {
await sendData()
loadingBar.finish()
} catch {
loadingBar.error()
} finally {
isSubmitting.value = false
}
}
</script>
start()
не сбрасывает текущий прогресс, что позволяет использовать несколько
параллельных операций.show
позволяет полностью скрыть компонент, если нужно временно убрать
индикатор с экрана.useLoadingBar
не будет работать.Эффективное использование Loading Bar повышает воспринимаемую скорость работы интерфейса и делает взаимодействие с приложением более плавным и информативным.