Библиотека Noty предоставляет гибкий механизм уведомлений с возможностью реагирования на действия пользователя через колбэки. Для эффективного использования событий важно уметь передавать дополнительные параметры в эти функции.
Каждое уведомление Noty поддерживает следующие события:
onShow – вызывается при отображении уведомленияonClose – вызывается при закрытии уведомленияonClick – срабатывает при клике на уведомлениеonHover / onMouseLeave – реагируют на
наведение и уход курсораПример базового уведомления с колбэком:
new Noty({
text: 'Пример уведомления',
type: 'alert',
timeout: 3000,
callbacks: {
onShow: function() {
console.log('Уведомление отображено');
}
}
}).show();
В стандартной реализации колбэк не принимает дополнительных аргументов напрямую. Для передачи внешних параметров необходимо использовать замыкания или стрелочные функции.
Замыкание позволяет “захватить” внешние переменные и использовать их внутри колбэка.
const userId = 42;
const message = 'Привет, пользователь!';
new Noty({
text: 'Уведомление с параметрами',
type: 'success',
callbacks: {
onShow: function() {
console.log(`Пользователь: ${userId}, сообщение: ${message}`);
}
}
}).show();
В этом примере переменные userId и message
доступны внутри функции onShow благодаря замыканию. Этот
подход особенно полезен, когда необходимо динамически создавать
уведомления с разными контекстными данными.
Стрелочные функции позволяют лаконично передавать параметры в
колбэки, сохраняя контекст this.
const notificationText = 'Новая задача добавлена';
const taskId = 101;
new Noty({
text: notificationText,
type: 'information',
callbacks: {
onClick: () => {
console.log(`Клик по уведомлению для задачи №${taskId}`);
}
}
}).show();
Стрелочная функция здесь автоматически сохраняет доступ к переменной
taskId из внешней области видимости.
При создании нескольких уведомлений с уникальными параметрами удобно использовать функцию-генератор:
function createTaskNotification(task) {
return new Noty({
text: `Задача: ${task.name}`,
type: 'alert',
callbacks: {
onClick: () => {
console.log(`Открыть задачу ID: ${task.id}`);
}
}
}).show();
}
const tasks = [
{ id: 1, name: 'Сделать отчет' },
{ id: 2, name: 'Подготовить презентацию' }
];
tasks.forEach(task => createTaskNotification(task));
Каждое уведомление получает собственный контекст task,
что позволяет корректно обрабатывать события без глобальных
переменных.
Метод bind позволяет жестко привязать контекст и
параметры к функции.
function handleClick(taskId) {
console.log(`Задача с ID ${taskId} выбрана`);
}
const task = { id: 55 };
new Noty({
text: 'Кликни для просмотра задачи',
type: 'info',
callbacks: {
onClick: handleClick.bind(null, task.id)
}
}).show();
Здесь handleClick.bind(null, task.id) создает новую
функцию, в которой task.id будет передан как первый
аргумент при срабатывании события.
Noty позволяет добавлять кастомные кнопки с собственными колбэками.
Параметры передаются аналогично: через замыкания, стрелочные функции или
bind.
const task = { id: 10, name: 'Проверить почту' };
new Noty({
text: 'Действия с задачей',
type: 'alert',
buttons: [
Noty.button('Открыть', 'btn btn-success', () => {
console.log(`Открываем задачу ${task.name}`);
}),
Noty.button('Закрыть', 'btn btn-error', () => {
console.log('Закрытие уведомления');
})
]
}).show();
Каждая кнопка получает собственный контекст, что позволяет передавать разные параметры без пересечения.
bind позволяет жестко задать параметры и контекст для
функции.Эти методы позволяют создавать сложные, интерактивные уведомления с параметризированными действиями, обеспечивая гибкость и чистоту кода при работе с Noty.