В библиотеке Navigo префиксы путей позволяют создавать маршруты с базовым сегментом URL, который будет автоматически добавляться ко всем маршрутам, заданным в роутере. Это особенно важно при разработке одностраничных приложений (SPA), когда приложение может находиться не в корне веб-сервера, а в подкаталоге. Применение префиксов упрощает управление маршрутами и делает код более универсальным.
Для задания префикса используется параметр root при
создании экземпляра Navigo:
import Navigo from 'navigo';
const router = new Navigo('/app', { hash: false });
Здесь /app — это префикс, который будет автоматически
добавлен ко всем маршрутам. Если маршрут задан как
/dashboard, фактический URL будет
/app/dashboard.
true) или обычной истории браузера
(false).После задания префикса маршруты объявляются как обычно:
router.on('/dashboard', () => {
console.log('Dashboard открыт');
});
router.on('/profile/:id', (params) => {
console.log('Профиль пользователя', params.id);
});
При обращении к URL /app/dashboard сработает
соответствующий маршрут, а /app/profile/42 передаст в
обработчик объект { id: '42' }.
Префикс действует на все маршруты глобально. Если необходимо временно
использовать маршрут без префикса, его можно указывать полностью,
начиная с /:
router.on('/special', () => {
console.log('Маршрут без префикса');
});
Применение префикса не мешает работе динамических сегментов:
router.on('/product/:category/:id', (params) => {
console.log(`Категория: ${params.category}, ID: ${params.id}`);
});
Для URL /app/product/electronics/123 объект
params будет
{ category: 'electronics', id: '123' }.
Navigo позволяет генерировать ссылки с учетом префикса через метод
generate:
const url = router.generate('/profile/:id', { id: 5 });
console.log(url); // /app/profile/5
Это гарантирует, что ссылки внутри приложения всегда корректны независимо от базового пути, заданного при инициализации роутера.
Хотя чаще всего префикс задается один раз при создании роутера, можно
изменить его динамически через метод updatePageLinks или
при необходимости перенастроить корневой путь:
router.root('/newApp');
router.updatePageLinks();
После этого все ссылки с атрибутом data-navigo будут
использовать новый префикс /newApp.
При использовании хеш-маршрутизации префикс применяется к части URL
до символа # и не изменяет хеш:
const router = new Navigo('/app', { hash: true });
URL /app/#/dashboard корректно сопоставляется с
маршрутом /dashboard.
:param для гибкого построения маршрутов.router.generate обеспечивает
согласованность URL даже при изменении базового пути.import Navigo from 'navigo';
const router = new Navigo('/app', { hash: false });
router
.on('/', () => console.log('Главная страница'))
.on('/dashboard', () => console.log('Dashboard'))
.on('/profile/:id', (params) => console.log('Профиль пользователя', params.id))
.on('/product/:category/:id', (params) => console.log(`Категория: ${params.category}, ID: ${params.id}`));
router.resolve();
В этом примере все маршруты учитывают префикс /app,
динамические сегменты корректно передают параметры, а вызов
router.resolve() запускает обработку текущего URL с учетом
префикса.
Префиксы путей в Navigo являются ключевым инструментом для масштабируемых SPA-приложений, обеспечивая согласованность маршрутизации и удобство управления URL на любом уровне вложенности.