В библиотеке iziToast все уведомления создаются с
помощью функции iziToast.show() или специализированных
методов, таких как iziToast.success(),
iziToast.error(), iziToast.info() и
iziToast.warning(). Одной из ключевых особенностей является
возможность использовать callback-функции, которые
вызываются при определённых событиях уведомления:
onOpening, onOpened, onClosing,
onClosed, а также для кнопок уведомлений через
buttons. Передача параметров в эти callback требует
внимательного подхода, чтобы сохранить правильный контекст и передать
данные в момент вызова.
iziToast поддерживает следующие события с callback:
onOpening(instance, toast) – вызывается до отображения
уведомления.onOpened(instance, toast) – вызывается сразу после
того, как уведомление стало видимым.onClosing(instance, toast, closedBy) – вызывается до
закрытия уведомления.onClosed(instance, toast, closedBy) – вызывается после
закрытия уведомления.Каждый callback получает следующие параметры:
instance – объект iziToast с методами управления
уведомлениями (destroy, hide,
show и др.).toast – DOM-элемент уведомления, что позволяет
манипулировать его содержимым.closedBy – строка, описывающая, каким образом
уведомление было закрыто ("timeout", "button",
"overlay", "manual").Прямого способа добавить параметры в стандартные события нет, поэтому используют замыкания или анонимные функции для сохранения контекста.
Пример с замыканием:
function showNotification(userId) {
iziToast.success({
title: 'Успешно',
message: 'Данные пользователя загружены',
onClosing: function(instance, toast, closedBy) {
handleClose(userId, closedBy);
}
});
}
function handleClose(userId, reason) {
console.log(`Уведомление для пользователя ${userId} закрыто по причине: ${reason}`);
}
showNotification(42);
В этом примере параметр userId передаётся в callback
через область видимости функции. Такой способ позволяет
динамически передавать любые данные в момент вызова события.
iziToast поддерживает кнопки внутри уведомлений с
помощью опции buttons. Каждая кнопка имеет
callback-функцию, где также можно использовать замыкания:
iziToast.show({
title: 'Подтверждение',
message: 'Вы хотите удалить элемент?',
buttons: [
['<button>Да</button>', function (instance, toast) {
deleteItem(101);
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}],
['<button>Нет</button>', function (instance, toast) {
console.log('Удаление отменено');
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}]
]
});
function deleteItem(itemId) {
console.log(`Элемент с ID ${itemId} удалён`);
}
Здесь itemId передается через замыкание в callback
кнопки. Внутри кнопки можно также управлять самим уведомлением через
метод hide.
Стрелочные функции позволяют сохранять контекст родительской функции и одновременно передавать параметры:
const user = { id: 7, name: 'Иван' };
iziToast.info({
title: 'Приветствие',
message: `Добро пожаловать, ${user.name}!`,
onOpened: (instance, toast) => handleOpen(user.id)
});
function handleOpen(userId) {
console.log(`Уведомление открыто для пользователя ${userId}`);
}
Стрелочные функции удобны для кратких операций и читаемого синтаксиса, особенно при работе с динамическими данными.
Если требуется, чтобы callback имел доступ к параметрам вне
замыканий, можно сохранять данные прямо в DOM-элементе уведомления через
dataset:
iziToast.show({
title: 'Важное',
message: 'Событие с ID 555',
onOpening: function(instance, toast) {
toast.dataset.eventId = '555';
},
onClosed: function(instance, toast) {
const eventId = toast.dataset.eventId;
console.log(`Уведомление с событием ${eventId} закрыто`);
}
});
Такой подход полезен, если уведомление создаётся динамически и callback вызывается после асинхронных операций.
dataset DOM-элемента.function notifyUser(user) {
iziToast.show({
title: 'Информация',
message: `Пользователь ${user.name} добавлен`,
onOpened: (instance, toast) => console.log(`Открыто уведомление для ${user.id}`),
onClosed: (instance, toast, closedBy) => console.log(`Закрыто уведомление для ${user.id}, причина: ${closedBy}`),
buttons: [
['<button>Подробнее</button>', function (instance, toast) {
console.log(`Показать детали пользователя ${user.id}`);
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}]
]
});
}
notifyUser({ id: 3, name: 'Алексей' });
Этот пример объединяет callback событий и
параметры кнопок, демонстрируя гибкость передачи данных
через замыкания и управление уведомлениями через методы
instance.