В библиотеке Naive UI программный вызов компонентов
позволяет создавать, управлять и динамически изменять элементы
интерфейса без необходимости их прямого включения в шаблон Vue. Такой
подход особенно полезен для динамических модальных окон, уведомлений,
диалогов подтверждения и интерактивных панелей. Основная идея
заключается в том, что компонент создается и монтируется через функцию
API, а не через обычный <template>.
Naive UI предоставляет несколько ключевых функций для программного вызова компонентов:
useDialog — для диалоговых оконuseMessage — для уведомлений и
информационных сообщенийuseNotification — для системных
уведомленийuseLoadingBar — для отображения
индикатора загрузкиВсе эти функции возвращают объект, содержащий методы управления
компонентом, например open, close,
destroy и конфигурационные опции.
Пример базового вызова диалога:
import { useDialog } from 'naive-ui'
import { createApp } from 'vue'
const dialog = useDialog()
dialog.info({
title: 'Информационное окно',
content: 'Это программно созданное окно с информацией.',
positiveText: 'Ок',
negativeText: 'Отмена'
})
В этом примере dialog.info создаёт программный экземпляр
информационного окна, который автоматически монтируется и отображается
на странице. После закрытия экземпляр уничтожается, что освобождает
память.
Программные компоненты управляются через методы, предоставляемые Naive UI. Основные методы включают:
open() — отображает компонент, если он
ещё не показан.close() — закрывает компонент.destroy() — полностью удаляет
компонент из DOM и освобождает ресурсы.Использование destroy особенно важно при создании
большого количества динамических компонентов, чтобы избежать утечек
памяти.
Пример использования методов жизненного цикла:
const dialogInstance = dialog.create({
title: 'Подтверждение удаления',
content: 'Вы уверены, что хотите удалить элемент?',
positiveText: 'Да',
negativeText: 'Нет'
})
dialogInstance.open()
// Закрытие через 3 секунды
setTimeout(() => {
dialogInstance.close()
dialogInstance.destroy()
}, 3000)
Каждая функция программного вызова принимает объект конфигурации. Основные параметры включают:
title — заголовок окнаcontent — содержимое (может быть
строкой или VNode)positiveText /
negativeText — текст кнопокonPositiveClick /
onNegativeClick — обработчики событийstyle / class —
кастомизация внешнего видаМожно также передавать динамические слоты через
render:
dialog.create({
title: 'Динамический контент',
render: () => h('div', { style: { color: 'red' } }, 'Содержимое через render')
})
Использование render позволяет внедрять сложные
компоненты и интерактивные элементы в программно созданное окно.
Для сообщений используется useMessage. Пример базового
вызова:
import { useMessage } from 'naive-ui'
const message = useMessage()
message.success('Операция выполнена успешно!')
message.error('Произошла ошибка!')
message.warning('Внимание: проверьте данные!')
Методы success, error, warning
и info позволяют быстро создавать уведомления с
предопределённой стилизацией. Уведомления автоматически исчезают через
стандартное время отображения, которое можно настроить через параметр
duration.
Пример с кастомизацией:
message.info({
content: 'Обновление завершено',
duration: 5000,
closable: true
})
Функция useNotification предоставляет расширенные
возможности для уведомлений, включая позиционирование, кастомные иконки
и пользовательские действия:
import { useNotification } from 'naive-ui'
const notification = useNotification()
notification.info({
title: 'Системное уведомление',
content: 'Новое событие в системе',
duration: 10000,
onClick: () => console.log('Нажата нотификация')
})
Позиционирование можно задать через placement:
notification.success({
title: 'Готово',
content: 'Загрузка завершена',
placement: 'bottom-right'
})
useLoadingBar позволяет управлять глобальным индикатором
прогресса:
import { useLoadingBar } from 'naive-ui'
const loadingBar = useLoadingBar()
loadingBar.start() // Запуск индикатора
setTimeout(() => loadingBar.finish(), 2000) // Завершение через 2 секунды
Методы управления:
start() — начинает загрузкуupdate(percent) — обновляет
прогрессfinish() — завершает загрузку и
скрывает индикаторerror() — отображает индикатор
ошибкиИндикатор автоматически интегрируется в верхнюю часть приложения, без необходимости вручную добавлять его в DOM.
Все программные вызовы легко интегрируются с Composition API. Это позволяет создавать динамический интерфейс на лету и управлять состоянием через реактивные переменные:
import { ref } from 'vue'
const isDialogOpen = ref(false)
const dialog = useDialog()
function showDialog() {
isDialogOpen.value = true
dialog.info({
title: 'Reactive dialog',
content: 'Состояние контролируется через ref',
onPositiveClick: () => (isDialogOpen.value = false)
})
}
info, success и т.д.), чтобы не
создавать лишние экземпляры.create() и сохранять ссылку на экземпляр, управляя
жизненным циклом через open, close,
destroy.render для сложного контента вместо
статической строки, если требуется динамическая визуализация.Программный вызов в Naive UI обеспечивает гибкость и контроль над интерфейсом, позволяя создавать динамичные и отзывчивые элементы без перегрузки шаблонов Vue.