В библиотеке Navigo маршрутизация строится на
сопоставлении URL с маршрутами, однако полноценная работа с параметрами
запроса требует отдельного подхода. Navigo изначально не парсит
query-параметры автоматически, поэтому для получения данных из строки
запроса используются методы работы с объектом location и
встроенные средства JavaScript.
Для извлечения параметров запроса применяется объект
URLSearchParams. Например, при URL:
/products?category=books&page=2
доступ к параметрам можно получить так:
const queryString = window.location.search;
const params = new URLSearchParams(queryString);
const category = params.get('category'); // 'books'
const page = params.get('page'); // '2'
Ключевой момент: Navigo не передаёт query-параметры
напрямую в колбэк маршрута, их нужно извлекать через
window.location.search или location.href.
Для маршрутов Navigo можно комбинировать работу с path-параметрами и query-параметрами. Пример:
const router = new Navigo('/');
router.on('/products/:id', (params) => {
const query = new URLSearchParams(window.location.search);
const sort = query.get('sort') || 'default';
const id = params.id;
console.log(`Товар ID: ${id}, сортировка: ${sort}`);
});
Здесь params.id — это path-параметр, а sort
извлекается из строки запроса. Такой подход обеспечивает полное покрытие
маршрутизации с динамическими сегментами URL.
URLSearchParams поддерживает все стандартные методы
работы с коллекцией параметров:
Пример фильтрации:
const params = new URLSearchParams(window.location.search);
const allowedFilters = ['category', 'price', 'brand'];
const filters = {};
for (const [key, value] of params.entries()) {
if (allowedFilters.includes(key)) {
filters[key] = value;
}
}
console.log(filters);
Этот метод полезен для создания безопасного объекта фильтров без лишних параметров, передаваемых пользователем.
Для генерации ссылок с query-параметрами удобнее использовать объект
URL:
const url = new URL('/products', window.location.origin);
url.searchParams.set('category', 'books');
url.searchParams.set('page', '2');
console.log(url.toString()); // http://example.com/products?category=books&page=2
Такой способ гарантирует корректное экранирование символов и формирование валидного URL, особенно при динамическом формировании ссылок на основе данных.
Navigo поддерживает метод navigate, который позволяет
изменять URL без полной перезагрузки:
const router = new Navigo('/');
function updateQueryParam(key, value) {
const url = new URL(window.location.href);
url.searchParams.set(key, value);
router.navigate(url.pathname + url.search);
}
updateQueryParam('page', '3'); // URL обновится на /products?page=3
Использование router.navigate обеспечивает совместимость
с системой маршрутизации Navigo и корректное срабатывание обработчиков
маршрутов.
Если query-параметр может встречаться несколько раз,
URLSearchParams.getAll() возвращает массив всех
значений:
// URL: /products?tag=js&tag=css&tag=html
const tags = new URLSearchParams(window.location.search).getAll('tag');
console.log(tags); // ['js', 'css', 'html']
Это удобно для фильтров или тегов, где одно свойство может иметь несколько значений.
:id) и query-параметры обрабатываются
разными способами.URLSearchParams обеспечивает удобный и безопасный
доступ к query-параметрам.router.navigate, чтобы маршрутизация оставалась
консистентной.Эти подходы формируют надежную и гибкую систему парсинга и управления параметрами запроса в приложениях на базе Navigo.