Navigo — это легковесная библиотека для маршрутизации в JavaScript, которая позволяет управлять URL-путями и динамически подгружать содержимое на странице без перезагрузки. Одним из ключевых аспектов работы с Navigo является возможность передачи данных через URL. Эти данные могут передаваться как параметры пути, параметры запроса (query parameters) или через хеш-фрагменты.
Параметры пути позволяют встроить динамические значения прямо в URL.
В Navigo они обозначаются с помощью двоеточия :. Например,
URL /user/:id может принимать любой идентификатор
пользователя.
const router = new Navigo('/');
router.on('/user/:id', ({ data }) => {
console.log('ID пользователя:', data.id);
});
router.navigate('/user/42'); // Выведет: ID пользователя: 42
Ключевые моменты:
data./product/:category/:id.undefined.Query-параметры — это часть URL после символа ?. Они
позволяют передавать дополнительные данные без изменения структуры
маршрута.
router.on('/search', ({ query }) => {
console.log('Поиск:', query.q);
});
router.navigate('/search?q=javascript'); // Выведет: Поиск: javascript
Особенности работы с query-параметрами:
query автоматически содержит все пары
ключ=значение./search?q=js&sort=asc.undefined.Navigo позволяет комбинировать параметры пути и query. Например,
маршрут /user/:id/details может принимать как
id в пути, так и дополнительные параметры через
?.
router.on('/user/:id/details', ({ data, query }) => {
console.log('ID:', data.id);
console.log('Фильтр:', query.filter);
});
router.navigate('/user/123/details?filter=active');
// ID: 123
// Фильтр: active
Это дает гибкость при построении сложных интерфейсов, где часть данных является обязательной (параметры пути), а часть — опциональной (query-параметры).
Navigo поддерживает маршруты с хешем, что удобно для одностраничных приложений (SPA) с внутренними состояниями или вкладками.
router.on('/page', ({ hash }) => {
console.log('Хеш:', hash);
});
router.navigate('/page#section2'); // Выведет: Хеш: section2
Особенности:
hash в обработчике
маршрута.Navigo поддерживает опциональные параметры пути с помощью скобок
(). Это позволяет задавать маршруты, которые могут работать
с разным количеством параметров.
router.on('/blog/:category(/:postId)', ({ data }) => {
console.log('Категория:', data.category);
console.log('ID поста:', data.postId);
});
router.navigate('/blog/tech'); // Категория: tech, ID поста: undefined
router.navigate('/blog/tech/101'); // Категория: tech, ID поста: 101
Преимущества:
JSON.stringify) и последующая десериализация
(JSON.parse).encodeURIComponent).router.on('/dashboard/:userId/settings(/:tab)', ({ data, query, hash }) => {
console.log('Пользователь:', data.userId);
console.log('Вкладка:', data.tab);
console.log('Фильтр:', query.filter);
console.log('Хеш:', hash);
});
router.navigate('/dashboard/42/settings/profile?filter=active#section1');
// Пользователь: 42
// Вкладка: profile
// Фильтр: active
// Хеш: section1
Этот пример демонстрирует полное использование возможностей Navigo для передачи данных через URL, включая параметры пути, опциональные параметры, query-параметры и хеш. Такой подход позволяет создавать гибкие и удобные маршруты для современных одностраничных приложений.