Navigo — это современная библиотека для маршрутизации на клиентской стороне в JavaScript, позволяющая управлять переходами между “страницами” одностраничного приложения без перезагрузки. Одним из ключевых аспектов работы с Navigo является обработка событий маршрутизатора, которые позволяют контролировать жизненный цикл переходов и реагировать на изменения состояния маршрутов.
Navigo предоставляет встроенные события, которые можно использовать для управления поведением приложения:
on – добавление обработчиков событий
маршрутизатора.before – вызов функции перед
выполнением маршрута, возможность отменить переход.after – обработчик после завершения
маршрута.error – обработка ошибок при попытке
навигации к несуществующему маршруту.on и его
использованиеМетод on используется для регистрации обработчиков
маршрутов и событий. Его базовый синтаксис выглядит следующим
образом:
const router = new Navigo('/');
router.on({
'/home': () => { console.log('Маршрут /home активирован'); },
'/about': () => { console.log('Маршрут /about активирован'); }
}).resolve();
resolve() инициирует проверку текущего URL и
выполнение соответствующего обработчика.Обработчики могут быть как простыми функциями, так и асинхронными вызовами для подгрузки данных перед отображением контента.
beforeСобытие before позволяет перехватывать переходы и
выполнять действия до изменения состояния маршрута. Это полезно для
проверки авторизации, сохранения данных формы или отмены перехода.
Синтаксис:
router.before((done, match) => {
if (!userIsLoggedIn && match.url !== '/login') {
router.navigate('/login');
done(false); // отмена перехода
} else {
done(); // разрешение перехода
}
});
done — функция, которая должна быть
вызвана для продолжения или отмены перехода.
done() — разрешить переход.done(false) — отменить переход.match — объект, содержащий
информацию о маршруте, включая URL, параметры и
query-параметры.
before можно использовать для асинхронных операций:
router.before(async (done, match) => {
const canNavigate = await checkUserPermissions(match.url);
done(canNavigate);
});
afterСобытие after вызывается после того, как Navigo
обработал маршрут. Это удобно для логирования переходов или изменения
состояния интерфейса:
router.after((match) => {
console.log(`Переход на ${match.url} завершен`);
});
match содержит информацию о
маршруте: URL, параметры, query-параметры.errorСобытие error срабатывает, если не найден
соответствующий маршрут. Используется для отображения страниц 404 или
логирования ошибок:
router.notFound(() => {
console.error('Маршрут не найден');
});
notFound,
аналогичный обработчику ошибок.router.notFound(() => router.navigate('/home'));
Последовательность вызова
before, затем on, затем
after.before отменяет переход, обработчик маршрута и
after не выполняются.Асинхронность
async/await.before позволяют корректно
контролировать доступ к маршрутам.Передача параметров маршрута
/user/:id, передаются в объект
match.params.router.on('/user/:id', (match) => {
console.log(`ID пользователя: ${match.params.id}`);
});
Глобальные события
before и
after для всех маршрутов.on.Логирование переходов с асинхронной проверкой:
router.before(async (done, match) => {
console.log(`Попытка перехода на ${match.url}`);
const hasAccess = await checkAccess(match.url);
done(hasAccess);
});
router.on('/dashboard', () => {
console.log('Открыт Dashboard');
});
router.after((match) => {
console.log(`Завершен переход на ${match.url}`);
});
Обработка маршрутов с параметрами и query:
router.on('/search/:query', (match) => {
const { query } = match.params;
const { page = 1 } = match.query;
console.log(`Поиск: ${query}, страница: ${page}`);
});
Использование событий в Navigo позволяет гибко управлять навигацией, обеспечивать проверку доступа, контролировать асинхронные операции и отслеживать историю переходов, делая одностраничные приложения более устойчивыми и управляемыми.