Библиотека Noty позволяет создавать уведомления в браузере с гибкой кастомизацией. Одной из важных задач при работе с динамическими интерфейсами является контроль количества отображаемых уведомлений и предотвращение дублирования. Для этого необходима проверка существующих уведомлений перед созданием нового.
В Noty каждый экземпляр уведомления является объектом, и библиотека предоставляет методы для работы с ними. Существует несколько способов проверить наличие активного уведомления:
Использование глобального массива
Noty.getAll() Метод Noty.getAll()
возвращает массив всех текущих уведомлений на странице. С его помощью
можно определить, отображается ли уведомление с конкретным текстом или
идентификатором.
let notifications = Noty.getAll();
let exists = notifications.some(n => n.text === 'Данные успешно сохранены');
if (!exists) {
new Noty({
text: 'Данные успешно сохранены',
type: 'success',
timeout: 3000
}).show();
}
Пояснение:
Noty.getAll() возвращает все активные экземпляры.Array.prototype.some проверяет, есть ли
уведомление с нужным текстом.Сравнение по кастомным идентификаторам Для
удобства можно использовать кастомное свойство id в
конфигурации уведомления. Это позволяет точно идентифицировать
уведомление независимо от текста.
let notifications = Noty.getAll();
let exists = notifications.some(n => n.options.id === 'saveSuccess');
if (!exists) {
new Noty({
id: 'saveSuccess',
text: 'Данные успешно сохранены',
type: 'success',
timeout: 3000
}).show();
}
Преимущества метода:
Исключает дублирование даже при одинаковом тексте, но разной логике уведомлений.
Позволяет легко закрывать уведомление программно по ID:
let notif = notifications.find(n => n.options.id === 'saveSuccess');
notif.close();Иногда нужно проверить наличие уведомления определенного типа
(success, error, info,
warning) без учета текста:
let notifications = Noty.getAll();
let hasSuccess = notifications.some(n => n.options.type === 'success');
if (!hasSuccess) {
new Noty({
text: 'Операция выполнена успешно',
type: 'success',
timeout: 2500
}).show();
}
Комментарий:
id для более точного
контроля.Для предотвращения наложения одинаковых уведомлений можно не только проверять их существование, но и закрывать предыдущие экземпляры:
Noty.getAll()
.filter(n => n.options.id === 'saveSuccess')
.forEach(n => n.close());
new Noty({
id: 'saveSuccess',
text: 'Данные успешно сохранены',
type: 'success',
timeout: 3000
}).show();
Преимущества:
Если текст уведомления формируется динамически, можно использовать регулярные выражения или включать ключевые слова:
let keyword = 'успешно';
let exists = Noty.getAll().some(n => /успешно/.test(n.text));
if (!exists) {
new Noty({
text: 'Данные сохранены успешно',
type: 'success',
timeout: 3000
}).show();
}
Особенности метода:
Noty.getAll().id или типу
уведомления.Такой подход обеспечивает точный контроль над уведомлениями, предотвращает дублирование и улучшает интерфейс пользовательских уведомлений в веб-приложениях на JavaScript.