Navigo — это легковесный клиентский роутер для JavaScript, который позволяет управлять навигацией без перезагрузки страницы. Основной единицей работы являются маршруты, которые связывают URL с конкретной функцией обработчика.
Для начала необходимо создать экземпляр класса
Navigo:
import Navigo from 'navigo';
const router = new Navigo('/', { hash: true });
'/') указывает базовый путь
приложения.{ hash: true } включает маршрутизацию с
использованием хэша (#), что упрощает работу с серверами,
не поддерживающими pushState.Маршрут определяется методом on:
router.on('/home', () => {
console.log('Отображается главная страница');
});
Поддерживаются разные варианты определения маршрутов:
'/about').router.on(['/contact', '/support'], () => {
console.log('Страница контактов');
});
router.on({
'/login': () => console.log('GET /login'),
'POST /login': () => console.log('POST /login')
});
Navigo позволяет использовать параметры в маршрутах.
Они указываются через двоеточие ::
router.on('/user/:id', (params) => {
console.log('ID пользователя:', params.id);
});
params попадут значения динамических сегментов
URL.router.on('/post/:postId/comment/:commentId', (params) => {
console.log(params.postId, params.commentId);
});
Для более сложных условий можно использовать регулярные выражения:
router.on('/product/:id(\\d+)', (params) => {
console.log('ID продукта:', params.id);
});
id может содержать только цифры.Параметры могут быть необязательными с помощью
?:
router.on('/search/:query?', (params) => {
if (params.query) {
console.log('Поиск по:', params.query);
} else {
console.log('Пустой поиск');
}
});
Маршруты можно структурировать иерархически, комбинируя статические и динамические сегменты:
router.on('/category/:categoryId/product/:productId', (params) => {
console.log(params.categoryId, params.productId);
});
Для ловли любых оставшихся сегментов используется *:
router.on('/files/*', (params) => {
console.log('Путь к файлу:', params['*']);
});
* захватывает весь оставшийся путь.Метод on может принимать объект, где ключи — пути, а
значения — функции:
router.on({
'/': () => console.log('Главная'),
'/about': () => console.log('О нас'),
'/contact': () => console.log('Контакты')
});
Для обработки неизвестных маршрутов используется
notFound:
router.notFound(() => {
console.log('Страница не найдена');
});
После определения всех маршрутов необходимо вызвать
resolve:
router.resolve();
resolve() можно вызывать
повторно при изменении URL через
router.navigate(path)./about и
/about/ считаются разными маршрутами.window.location.search.router
.on('/', () => console.log('Главная'))
.on('/user/:id', (params) => console.log('Пользователь:', params.id))
.on('/search/:query?', (params) => console.log('Поиск:', params.query || 'пустой'))
.on('/files/*', (params) => console.log('Файлы:', params['*']))
.notFound(() => console.log('404'));
Такой подход демонстрирует всю мощь синтаксиса Navigo: статические маршруты, динамические сегменты, опциональные параметры и wildcard, объединённые в единую систему маршрутизации.