В библиотеке Navigo динамические параметры позволяют создавать маршруты с переменными частями URL, которые могут быть обработаны внутри обработчика маршрута. Это особенно важно для SPA-приложений, где необходимо реагировать на различные идентификаторы ресурсов без дублирования кода маршрутов.
Динамический сегмент маршрута обозначается через двоеточие
: перед именем параметра:
const router = new Navigo('/');
router.on('/users/:id', (params) => {
console.log(params.id);
});
В этом примере путь /users/42 передаст в объект
params ключ id со значением
"42".
Особенности:
/ до конца сегмента считаются
частью параметра.Можно использовать несколько динамических сегментов в одном маршруте:
router.on('/users/:userId/posts/:postId', (params) => {
console.log(`User: ${params.userId}, Post: ${params.postId}`);
});
При переходе на /users/7/posts/15 объект
params будет:
{
userId: "7",
postId: "15"
}
Navigo поддерживает опциональные параметры с использованием знака
вопроса ? внутри маршрута:
router.on('/search/:query?', (params) => {
if (params.query) {
console.log(`Поиск: ${params.query}`);
} else {
console.log('Пустой запрос');
}
});
/search/javascript, параметр
query будет "javascript"./search, объект params останется
пустым.В базовом варианте Navigo нет строгой валидации по типу или шаблону параметра. Однако можно использовать регулярные выражения через дополнительную проверку внутри обработчика:
router.on('/product/:id', (params) => {
if (/^\d+$/.test(params.id)) {
console.log(`ID продукта: ${params.id}`);
} else {
console.error('Неверный формат ID');
}
});
Для более сложных сценариев можно создавать кастомные правила:
router.on('/category/:name', { name: '[a-z]+' }, (params) => {
console.log(`Категория: ${params.name}`);
});
Здесь маршрутизатор будет соответствовать только строкам, состоящим из маленьких латинских букв.
Объект params, передаваемый в функцию обработчика,
всегда содержит ключи, соответствующие именам динамических сегментов.
Доступ к ним осуществляется через стандартную нотацию:
router.on('/profile/:username/settings', (params) => {
const user = params.username;
console.log(`Настройки пользователя: ${user}`);
});
Параметры всегда доступны синхронно, что упрощает работу с данными URL без дополнительной асинхронной логики.
Для генерации ссылок с динамическими параметрами используется метод
navigate:
router.navigate('/users/42');
Можно также строить URL динамически:
const userId = 99;
router.navigate(`/users/${userId}`);
Это гарантирует, что URL соответствует маршрутам с динамическими сегментами.
Navigo позволяет комбинировать динамические параметры с
универсальными сегментами *:
router.on('/files/:folder/*', (params) => {
console.log(`Папка: ${params.folder}, Путь: ${params['*']}`);
});
При переходе на /files/docs/manual.pdf объект
params будет:
{
folder: "docs",
"*": "manual.pdf"
}
Это удобно для маршрутов, где нужно захватывать произвольное количество вложенных сегментов.
Dynamические параметры в Navigo обеспечивают гибкость и читаемость маршрутов, позволяя легко обрабатывать различные состояния SPA без избыточного кода.