Navigo — это легковесный роутер для SPA (Single Page Applications) на JavaScript, который позволяет легко управлять маршрутизацией без перезагрузки страницы. Одной из ключевых возможностей является работа с параметрами URL, которые могут быть как динамическими сегментами пути, так и query-параметрами.
При определении маршрута в Navigo используются динамические сегменты,
обозначаемые двоеточием (:). Эти сегменты автоматически
извлекаются и становятся доступными через объект параметров.
Пример:
import Navigo from 'navigo';
const router = new Navigo('/');
router.on('/user/:id', (params) => {
console.log(params.id); // выводит значение сегмента id из URL
}).resolve();
:id — динамический сегмент маршрута.params содержит ключ id
с соответствующим значением из URL.Можно использовать несколько динамических сегментов в одном маршруте:
router.on('/post/:postId/comment/:commentId', (params) => {
console.log(params.postId); // идентификатор поста
console.log(params.commentId); // идентификатор комментария
}).resolve();
Особенности:
undefined.Navigo также позволяет работать с query-параметрами,
которые следуют после ? в URL. Для получения
query-параметров используется метод getQueryString() или
доступ через location.search.
Пример:
router.on('/search', () => {
const query = new URLSearchParams(window.location.search);
const term = query.get('q');
console.log(term); // значение параметра q
}).resolve();
Особенности работы с query-параметрами:
URLSearchParams поддерживает многократные значения
одного ключа (query.getAll('key')).popstate или использовать
router.resolve() при каждой навигации.Navigo позволяет объединять динамические сегменты и query-параметры, что удобно для сложных интерфейсов.
router.on('/product/:id', (params) => {
const query = new URLSearchParams(window.location.search);
const color = query.get('color');
console.log(params.id); // ID продукта
console.log(color); // выбранный цвет
}).resolve();
Особенности:
URLSearchParams).Иногда необходимо иметь значения по умолчанию для отсутствующих параметров. В этом случае можно использовать деструктуризацию с дефолтами:
router.on('/user/:id', ({ id = 'defaultId' } = {}) => {
console.log(id); // если id отсутствует, будет 'defaultId'
}).resolve();
Такой подход особенно полезен при динамических сегментах, которые могут быть опциональными.
Navigo поддерживает вложенные маршруты, где дочерние маршруты
наследуют часть пути родителя. Для получения параметров из родительского
маршрута используется объект params на каждом уровне.
router.on('/dashboard', {
'/:section': (params) => {
console.log(params.section); // раздел дашборда
},
'/:section/:item': (params) => {
console.log(params.section); // раздел
console.log(params.item); // конкретный элемент
}
}).resolve();
Особенности:
id, slug).Работа с параметрами в Navigo обеспечивает чистую и предсказуемую маршрутизацию, позволяя получать как обязательные значения пути, так и дополнительные опциональные данные через query-параметры, что делает SPA гибкой и легко расширяемой.