Page.js — это небольшая клиентская библиотека для маршрутизации в одностраничных приложениях (SPA), которая позволяет управлять переходами между страницами без полной перезагрузки. Центральным элементом работы с Page.js являются маршруты и ссылки, ведущие к ним. Понимание атрибутов ссылок и способов их обработки критично для построения эффективной навигации.
В HTML-ссылках важнейшими атрибутами для работы с Page.js являются:
href – основной адрес, на который
ведет ссылка. Page.js перехватывает клики по ссылкам с этим атрибутом и
предотвращает стандартное поведение браузера.data-navigo / data-page
(по соглашению проекта) – пользовательские атрибуты, которые могут
использоваться для дополнительной логики обработки или идентификации
маршрута.target – определяет, открывается ли
ссылка в новом окне (_blank) или в текущем. Page.js
игнорирует ссылки с target="_blank" и не перехватывает их,
оставляя стандартное поведение.rel – может содержать значения вроде
external, указывающие, что ссылка ведет за пределы
приложения, и Page.js также пропускает такие ссылки.Пример стандартной ссылки для SPA:
<a href="/about" class="nav-link">О нас</a>
При клике Page.js перехватывает этот переход, обновляет адресную строку и вызывает соответствующий маршрут, не перезагружая страницу.
Page.js использует делегирование событий, что позволяет автоматически отслеживать клики по ссылкам на уровне документа. Основные шаги:
Отслеживание события click на
документе.
Проверка атрибутов ссылки:
href начинается с http:// или
https:// и отличается от текущего хоста — переход
игнорируется.target="_blank" или
rel="external" — переход игнорируется.Прерывание стандартного поведения браузера с
помощью event.preventDefault().
Вызов функции маршрута с путем из атрибута
href.
Пример кода Page.js:
page('*', function(ctx, next) {
console.log('Текущий путь:', ctx.path);
next();
});
page();
Здесь Page.js автоматически перехватывает клики по ссылкам с
корректным href и передает путь в объект
ctx.path.
Для более тонкой настройки навигации можно использовать пользовательские атрибуты:
data-no-page – отключает перехват
клика Page.js.data-reload – принудительно вызывает
полную перезагрузку страницы, даже если путь совпадает с маршрутом
SPA.data-params – позволяет передавать
дополнительные параметры в маршруты.Пример использования:
<a href="/profile" data-params='{"userId": 42}'>Профиль</a>
page('/profile', ctx => {
const userId = ctx.query.userId || JSON.parse(ctx.params.dataParams).userId;
console.log('Пользователь с ID:', userId);
});
Page.js позволяет программно управлять переходами без клика по
ссылке. Для этого используется функция
page.show(path, state, dispatch):
path — путь, на который нужно
перейти.state — объект состояния, который
будет доступен через ctx.state.dispatch — булевый флаг: если
true, маршрут будет вызван, если false — URL
изменится, но маршрут не вызовется.Пример:
document.querySelector('#goto-about').addEventListener('click', () => {
page.show('/about', { from: 'button' }, true);
});
Это позволяет эмулировать клики по ссылкам, учитывая все атрибуты и параметры маршрута.
Часто требуется генерировать ссылки динамически, основываясь на данных:
const users = [{id: 1, name: 'Анна'}, {id: 2, name: 'Иван'}];
users.forEach(user => {
const link = document.createElement('a');
link.href = `/users/${user.id}`;
link.textContent = user.name;
document.body.appendChild(link);
});
Page.js автоматически перехватит клики по таким ссылкам, как и по статическим, обеспечивая единый механизм маршрутизации.
rel="external" или target="_blank", чтобы не
ломать SPA-навигацию.data-* атрибуты для передачи
дополнительных параметров без изменения URL.page.show() вместо прямой смены
window.location.Page.js обеспечивает гибкий и прозрачный механизм работы с атрибутами ссылок, позволяя SPA-приложениям оставаться быстрыми, а код навигации — читаемым и управляемым. Контроль над поведением ссылок через стандартные и пользовательские атрибуты делает маршрутизацию надежной и предсказуемой.