Hash-роутинг — это способ организации навигации в одностраничных
приложениях (SPA) с использованием символа # в URL. В
отличие от History API, hash-роутинг не требует серверной настройки для
обработки маршрутов, так как всё после # не отправляется на
сервер. В библиотеке Navigo это реализуется
автоматически при включении соответствующего режима.
import Navigo from 'navigo';
const router = new Navigo('/', { hash: true });
В данном примере hash: true активирует hash-режим.
Теперь все маршруты будут обрабатываться через часть URL после
#. Например, путь /about будет отображаться в
браузере как http://example.com/#/about.
Маршруты в Navigo объявляются с помощью метода on(). В
hash-режиме маршруты указываются точно так же, как в обычном режиме.
router.on('/home', () => {
console.log('Главная страница');
});
router.on('/about', () => {
console.log('О нас');
});
При переходе по http://example.com/#/home сработает
обработчик для /home.
Hash-роутинг в Navigo полностью поддерживает динамические сегменты и параметры.
router.on('/user/:id', (params) => {
console.log('ID пользователя:', params.id);
});
Переход по http://example.com/#/user/42 выведет в
консоль ID пользователя: 42.
Метод navigate() используется для программной навигации
между маршрутами. В hash-режиме он автоматически обновляет часть URL
после #.
router.navigate('/about');
После вызова браузер покажет http://example.com/#/about,
а соответствующий обработчик маршрута выполнится.
router.navigate('/user/99');
URL обновится на http://example.com/#/user/99.
Для маршрутов, которых нет в объявленных обработчиках, используется
метод notFound():
router.notFound(() => {
console.log('Страница не найдена');
});
При переходе на http://example.com/#/unknown сработает
обработчик notFound.
Navigo позволяет использовать регулярные выражения для гибкой маршрутизации:
router.on('/product/:id(\\d+)', (params) => {
console.log('ID продукта:', params.id);
});
С помощью регулярных выражений можно ограничивать допустимые значения параметров, например, только числа.
По умолчанию Navigo использует символ # перед маршрутом.
При необходимости можно задать кастомный префикс:
const router = new Navigo('/', { hash: true, hashPrefix: '!' });
Теперь URL будут иметь вид:
http://example.com/#!/about.
Метод updatePageLinks() позволяет обновить все
внутренние ссылки <a> с атрибутом href,
чтобы они корректно работали с Navigo в hash-режиме:
router.updatePageLinks();
Это важно, если ссылки создаются динамически после загрузки страницы.
<a href="#/home">Главная</a>
<a href="#/about">О нас</a>
<a href="#/user/1">Профиль</a>
При нажатии на любую из ссылок Navigo перехватит переход и выполнит соответствующий обработчик без перезагрузки страницы.
#.params в
обработчике.navigate() корректно обновляет hash и вызывает
обработчик.Hash-режим в Navigo является оптимальным выбором для небольших SPA или проектов, где серверная поддержка History API отсутствует. Он обеспечивает простую, стабильную и предсказуемую маршрутизацию с полным набором возможностей Navigo.