Navigo — это лёгкая библиотека для маршрутизации в JavaScript, которая позволяет организовать управление URL и динамически отображать контент в одностраничных приложениях (SPA). Одной из важных возможностей является работа с множественными значениями в маршрутах, что позволяет эффективно управлять различными вариантами URL и параметров запроса.
В Navigo маршруты задаются с использованием строк с параметрами, выделяемыми двоеточием. Для обработки множественных значений одного параметра используется разделение значений через специальные символы, либо настройка пользовательских функций при регистрации маршрута.
Пример базового маршрута с параметром:
const router = new Navigo('/');
router.on('/product/:id', ({ data }) => {
console.log('ID продукта:', data.id);
});
Чтобы принимать несколько значений для одного параметра, удобно использовать разделитель внутри URL и преобразовывать строку в массив:
router.on('/tags/:list', ({ data }) => {
const tags = data.list.split(',');
console.log('Список тегов:', tags);
});
В этом примере URL /tags/javascript,html,css вернёт
массив ['javascript', 'html', 'css'].
Для более сложных случаев, когда требуется ограничить набор допустимых значений параметра или поддерживать несколько вариантов URL, Navigo позволяет использовать регулярные выражения:
router.on('/category/:name(js|css|html)', ({ data }) => {
console.log('Выбрана категория:', data.name);
});
Здесь параметр :name может принимать только значения
js, css или html. Такой подход
обеспечивает строгую фильтрацию входящих маршрутов и предотвращает
попадание недопустимых URL.
Navigo поддерживает необязательные параметры, что полезно при работе с множественными значениями, которые могут быть переданы или отсутствовать:
router.on('/filter/:type?', ({ data }) => {
if (data.type) {
const types = data.type.split('|');
console.log('Типы фильтрации:', types);
} else {
console.log('Фильтры не заданы');
}
});
URL /filter/js|css вернёт массив
['js', 'css'], а /filter/ обработается
корректно без ошибок.
Помимо параметров пути, Navigo позволяет работать с query-параметрами, которые часто используются для передачи множественных значений через URL:
router.on('/search', ({ query }) => {
const tags = query.tags ? query.tags.split(',') : [];
console.log('Поиск по тегам:', tags);
});
Для URL /search?tags=javascript,css,html параметр
tags будет преобразован в массив. Этот способ особенно
удобен для фильтров, тегов и множественного выбора.
Для построения ссылок на маршруты с множественными значениями удобно
использовать функцию generate, которая позволяет
динамически формировать URL:
const selectedTags = ['js', 'html', 'css'];
const url = router.generate('/tags/:list', { list: selectedTags.join(',') });
console.log(url); // "/tags/js,html,css"
Таким образом, можно синхронизировать состояние приложения с URL и легко восстанавливать массивы параметров при навигации.
Navigo поддерживает вложенные маршруты, что полезно для построения сложных структур с множественными значениями:
router.on('/user/:id/posts/:postIds', ({ data }) => {
const posts = data.postIds.split(',');
console.log(`Пользователь ${data.id} выбрал посты:`, posts);
});
URL /user/42/posts/1,2,3 обработается корректно,
извлекая массив [1, 2, 3]. Вложенные маршруты позволяют
комбинировать идентификаторы пользователя, категорий или тегов с
массивами значений.
Для более гибкой логики можно использовать кастомные функции для преобразования параметров. Например, конвертировать строки в числа или другие структуры данных:
router.on('/order/:ids', ({ data }) => {
const orderIds = data.ids.split(',').map(id => parseInt(id, 10));
console.log('ID заказов:', orderIds);
});
Использование кастомных обработчиков позволяет гарантировать правильный тип данных и легко интегрировать маршруты с бизнес-логикой приложения.
',',
'|') для передачи массивов.? для
гибкой маршрутизации.Эти техники позволяют строить сложные маршруты с множественными параметрами, поддерживать чистый и предсказуемый URL, а также упрощают работу с динамическими данными в SPA на базе Navigo.