Navigo — это лёгкий роутер для JavaScript, который позволяет управлять навигацией в одностраничных приложениях (SPA). Модификация поведения роутера заключается в настройке обработки маршрутов, изменении способа разрешения URL, управлении историей и обработке параметров.
Параметр root позволяет задать базовый путь для всех
маршрутов. Это особенно важно, если приложение размещено не в корне
домена.
const router = new Navigo('/app/', { hash: false });
hash: false — отключает использование
хэшей (#) в URL./app/, например,
маршрут /dashboard будет разрешаться как
/app/dashboard.Изменение базового пути позволяет гибко интегрировать Navigo с различными серверными конфигурациями без изменения логики маршрутизации.
Маршруты могут содержать динамические сегменты, которые позволяют передавать данные через URL.
router.on('/user/:id', (params) => {
console.log(params.id);
});
:id — динамический параметр.params — объект, содержащий все динамические
сегменты.Модификация поведения с параметрами включает:
router.on('/user/:id(\\d+)', (params) => {
console.log(params.id); // Только числа
});
?:router.on('/search/:query?', (params) => {
console.log(params.query || 'поиск пустой');
});
Navigo поддерживает два режима работы с историей: через History API и через хэши.
const router = new Navigo('/', { hash: true });
hash: true — URL будет содержать #,
например /#/about.router.navigate('/about') автоматически обновляет URL и
вызывает соответствующий обработчик.Можно модифицировать поведение навигации с помощью опций метода
navigate:
router.navigate('/contact', { trigger: true, replace: false });
trigger — если true,
обработчик маршрута выполняется немедленно.replace — если true,
текущая запись в истории заменяется новым URL вместо добавления
новой.Чтобы изменить поведение при переходе на неизвестный маршрут,
используется метод notFound:
router.notFound(() => {
console.log('Маршрут не найден');
});
Можно комбинировать с динамическими параметрами для создания универсальной обработки ошибок.
Navigo позволяет создавать иерархию маршрутов, что полезно для сложных SPA.
router.on({
'/dashboard': () => { console.log('Dashboard'); },
'/dashboard/settings': () => { console.log('Settings'); }
});
router.hooks({
before: (done, params) => {
if (!params.user) {
console.log('Пользователь не авторизован');
done(false);
} else {
done();
}
}
});
Navigo поддерживает хуки, позволяющие вмешиваться в процесс навигации:
router.hooks({
before: (done, params) => {
console.log('Перед переходом', params);
done();
},
after: (params) => {
console.log('После перехода', params);
}
});
before можно выполнять асинхронные проверки,
например, запросы к серверу, и блокировать маршрут, если условие не
выполнено.*,
что позволяет захватывать остаток URL.router.on('/blog/*', (params) => {
console.log('Путь к блогу:', params[0]);
});
* захватывает все сегменты после
/blog/.Navigo предоставляет методы для динамического изменения маршрутов на лету:
router.on('/new-route', () => { console.log('Новый маршрут добавлен'); });
router.off('/new-route'); // Удаление маршрута
on и off позволяет создавать
маршруты только при необходимости, изменяя логику SPA без перезагрузки
страницы.navigate,
replace и trigger.notFound.*.Все эти инструменты позволяют тонко настраивать поведение Navigo, создавая гибкую и масштабируемую систему маршрутизации для современных SPA.