Для использования Navigo в проекте существует несколько способов подключения: через CDN, npm или локальную сборку.
Через CDN:
<script src="https://unpkg.com/navigo@8.11.1/lib/navigo.min.js"></script>
После этого объект Navigo становится доступным глобально
и его можно использовать для создания маршрутизатора.
Через npm:
npm install navigo
В коде на ES6 модулях подключение выглядит так:
import Navigo from 'navigo';
Использование npm предпочтительно для проектов с модульной структурой и сборкой через Webpack, Vite или Parcel, так как позволяет управлять версиями и подключать маршрутизатор как полноценный модуль.
Экземпляр Navigo создается с указанием базового пути и опций:
const router = new Navigo('/', { hash: false });
Параметры конструктора:
root — базовый путь приложения. Обычно это
'/'.
options — объект конфигурации:
hash (boolean) — использовать ли хеш-маршрутизацию
(# в URL). По умолчанию false.linksSelector (string) — селектор ссылок, которые
автоматически будут отслеживаться маршрутизатором.useHash (boolean, устаревший) — аналог
hash.trailingSlash (boolean) — учитывать или игнорировать
конечный слэш в URL.Маршруты в Navigo определяются методом .on(). Он
принимает объект или цепочку вызовов с путями и обработчиками.
Пример объекта маршрутов:
router.on({
'/': () => {
console.log('Главная страница');
},
'/about': () => {
console.log('О проекте');
},
'/contact': () => {
console.log('Контакты');
}
});
Пример с цепочкой вызовов:
router
.on('/', () => console.log('Главная'))
.on('/about', () => console.log('О проекте'))
.on('/contact', () => console.log('Контакты'));
Navigo поддерживает параметры URL, позволяя определять маршруты вида
/user/:id. Значения параметров автоматически передаются в
обработчик.
router.on('/user/:id', (params) => {
console.log('ID пользователя:', params.id);
});
Параметры можно комбинировать с несколькими сегментами:
router.on('/post/:postId/comment/:commentId', (params) => {
console.log(params.postId, params.commentId);
});
Опциональные параметры задаются через ? в пути.
Например:
router.on('/search/:query?', (params) => {
if (params.query) {
console.log('Поиск по запросу:', params.query);
} else {
console.log('Все результаты поиска');
}
});
Если параметр не указан, объект params содержит пустое
значение.
Метод .navigate() позволяет переходить на нужный маршрут
из кода, без использования ссылок <a>.
router.navigate('/about');
Также можно передавать параметры:
router.navigate('/user/123');
Если включена хеш-маршрутизация, URL автоматически преобразуется в
#/about или #/user/123.
Navigo позволяет отслеживать все изменения маршрутов с помощью метода
.hooks() или глобального слушателя:
router.hooks({
before: (done, params) => {
console.log('Перед переходом', params);
done(); // обязательно вызвать, иначе переход не произойдет
},
after: (params) => {
console.log('После перехода', params);
}
});
Метод done() используется для асинхронных операций,
например, загрузки данных перед рендером страницы.
Для автоматического перехвата кликов по ссылкам в проекте можно указать селектор ссылок:
const router = new Navigo('/', { linksSelector: 'a.nav-link' });
Все клики по ссылкам с классом nav-link будут
перехвачены Navigo, и страница не будет перезагружаться. Важно
использовать обычные <a href="/path"> для
совместимости.
Метод .notFound() позволяет определить обработчик для
маршрутов, которые не были зарегистрированы:
router.notFound(() => {
console.log('Страница не найдена');
});
Это удобно для создания страницы 404 без необходимости вручную проверять URL.
После определения всех маршрутов необходимо вызвать метод
.resolve(), чтобы маршрутизатор обработал текущий URL:
router.resolve();
Если используется асинхронная загрузка или динамический рендеринг,
.resolve() можно вызывать после завершения всех операций и
подготовки DOM.
import Navigo from 'navigo';
const router = new Navigo('/', { hash: false, linksSelector: 'a.nav-link' });
router
.on('/', () => renderHome())
.on('/about', () => renderAbout())
.on('/contact', () => renderContact())
.on('/user/:id', (params) => renderUser(params.id))
.notFound(() => renderNotFound())
.hooks({
before: (done, params) => {
console.log('Перед переходом', params);
done();
},
after: (params) => console.log('После перехода', params)
});
router.resolve();
function renderHome() { /* логика рендера главной */ }
function renderAbout() { /* логика рендера о проекте */ }
function renderContact() { /* логика рендера контактов */ }
function renderUser(id) { /* логика рендера пользователя */ }
function renderNotFound() { /* логика рендера 404 */ }
Этот код демонстрирует полностью функционирующий базовый маршрутизатор с динамическими параметрами, обработкой кликов по ссылкам, хуками и страницей 404.