Navigo — это легковесный роутер для JavaScript, который позволяет управлять маршрутизацией на стороне клиента с минимальными усилиями. Ключевым элементом работы с Navigo является создание экземпляра маршрутизатора с определёнными параметрами конфигурации. Рассмотрим их подробно.
Создание экземпляра Navigo производится через конструктор:
const router = new Navigo(root, useHash, hash);
Каждый параметр конструктора влияет на поведение маршрутизатора:
const router = new Navigo('/app/');
'/', роутер будет работать от корня
домена.'', тогда маршруты будут
рассчитываться относительно текущего пути.#) для маршрутизации:const router = new Navigo('/', true);
true — все маршруты будут после символа #,
например: example.com/#/home.false — роутер использует обычные пути, например:
example.com/home.Использование хеш-маршрутов удобно при статических страницах или при отсутствии поддержки сервера для обработки History API.
useHash включён:const router = new Navigo('/', true, '#!');
'#'.#!/.configureПосле создания экземпляра роутера можно настроить дополнительные
параметры через метод configure:
router.configure({
linksSelector: 'a',
update: null,
hash: '#!',
strategy: 'ALL',
});
Основные свойства конфигурации:
linksSelector (строка) CSS-селектор для ссылок, на которые Navigo будет навешивать обработку клика и предотвращать перезагрузку страницы.
'a'.'nav a, .menu-link'.update (функция) Функция, которая вызывается
каждый раз при смене маршрута. Используется для обновления состояния
приложения без ручного вызова router.resolve().
router.configure({
update: (params) => {
console.log('Маршрут изменился:', params);
}
});
hash (строка) Префикс хеша для хеш-маршрутов.
Если значение указано при useHash: true, оно будет
переопределено.
strategy (строка) Определяет стратегию обработки ссылок:
'ALL' — все ссылки срабатывают через Navigo.'ONE' — только ссылки внутри контейнера root.'NONE' — ссылки не перехватываются.Дополнительно можно управлять поведением роутера через методы конфигурации:
router.notFound(handler) — задаёт
обработчик для маршрутов, которые не найдены.router.notFound(() => {
document.body.innerHTML = '<h1>404 — Страница не найдена</h1>';
});
router.hooks(hooksObject) —
подключение хуков для событий маршрутизатора:router.hooks({
before: (done, params) => {
console.log('Перед переходом на маршрут', params);
done();
},
after: (params) => {
console.log('После перехода', params);
}
});
Типовые хуки:
before(done, params) — вызывается перед выполнением
маршрута. Обязателен вызов done(), чтобы переход
продолжился.after(params) — вызывается после перехода на
маршрут.already(params) — вызывается, если текущий маршрут
совпадает с новым.const router = new Navigo('/', true, '#!');
router.configure({
linksSelector: 'nav a',
update: (params) => {
console.log('Обновление состояния для', params.route);
},
hash: '#!',
strategy: 'ALL'
});
router.hooks({
before: (done, params) => {
console.log('Подготовка к маршруту:', params.route);
done();
},
after: (params) => {
console.log('Маршрут выполнен:', params.route);
}
});
router
.on('/', () => console.log('Главная'))
.on('/about', () => console.log('О нас'))
.resolve();
В этом примере демонстрируется полный цикл настройки: от конструктора до конфигурации, перехвата ссылок и хуков. Такой подход позволяет гибко управлять поведением роутера, обеспечивая плавную навигацию без перезагрузки страниц.
useHash: false, чтобы URL выглядел чистым.useHash: true.linksSelector помогает ограничивать область, в которой
ссылки обрабатываются Navigo, что важно при сложной DOM-структуре.before и after позволяют
интегрировать роутер с системой авторизации, анимациями переходов или
логированием.Использование всех этих параметров совместно позволяет создавать масштабируемую и управляемую клиентскую маршрутизацию с минимальными усилиями.