Библиотека Navigo предоставляет лёгкий и гибкий способ управления маршрутами в одностраничных приложениях (SPA). Одним из ключевых аспектов работы с маршрутизатором является переход на маршрут, который позволяет программно изменять состояние URL и отображаемое содержимое без полной перезагрузки страницы.
navigate()Главный инструмент для перехода между маршрутами — метод
navigate() объекта Navigo:
const router = new Navigo('/');
router.navigate('/about');
Ключевые моменты работы navigate():
Можно передавать опции вторым параметром:
router.navigate('/contact', { updateBrowserURL: true, callHandler: true });
Опции:
updateBrowserURL (по умолчанию true) —
изменяет URL в адресной строке.callHandler (по умолчанию true) — вызывает
обработчик маршрута сразу после перехода.replace (по умолчанию false) — заменяет
текущую запись в истории вместо добавления новой.Navigo поддерживает маршруты с динамическими параметрами:
router.on('/user/:id', ({ data }) => {
console.log('User ID:', data.id);
});
router.navigate('/user/42');
:id — параметр маршрута, который подставляется из
строки URL.data.Для передачи дополнительных данных можно
использовать объект query:
router.navigate('/search', { query: { q: 'Navigo', page: 2 } });
/search?q=Navigo&page=2.В версиях Navigo 8+ маршруты можно именовать при регистрации:
router.on({ name: 'home', path: '/' });
router.on({ name: 'profile', path: '/profile/:userId' });
router.navigate({ name: 'profile', params: { userId: 101 } });
Преимущества:
Иногда требуется изменить адресную строку, не вызывая обработчик:
router.navigate('/settings', { callHandler: false });
replaceИспользование опции replace позволяет заменять
текущий пункт истории, а не добавлять новый:
router.navigate('/login', { replace: true });
callHandler для немедленного вызова
обработчика или с false, если нужно только обновить
URL.Navigo корректно обрабатывает якоря и query-параметры:
router.navigate('/docs#section2');
router.navigate('/search', { query: { term: 'javascript' } });
#section2) сохраняется и прокручивается в
документе после изменения URL.Метод navigate() может использоваться в асинхронных
сценариях:
async function goToDashboard() {
await someAsyncCheck();
router.navigate('/dashboard');
}
Navigo автоматически синхронизирует состояние с историей браузера
через popstate и hashchange. Однако
программный переход через navigate():
replace: false).updateBrowserURL: false для
локальных переходов без изменения истории.router.on({
'/home': () => renderHome(),
'/profile/:userId': ({ data, query }) => renderProfile(data.userId, query),
'/search': ({ query }) => renderSearch(query.q, query.page),
});
document.getElementById('searchBtn').addEventListener('click', () => {
const query = { q: 'Navigo', page: 1 };
router.navigate('/search', { query });
});
router.navigate('/home'); // начальная загрузка
Эти механизмы позволяют строить сложные SPA с полным контролем над URL, историей браузера и состоянием приложения, сохраняя лёгкость и гибкость, которую предоставляет Navigo.