В библиотеке FAST Element параметры маршрутов играют ключевую роль при построении динамических интерфейсов, особенно когда необходимо передавать данные через URL и использовать их для управления отображением компонентов. FAST Element интегрируется с современными подходами к веб-компонентам, предоставляя мощный механизм связывания данных с DOM через observables и bindings.
Маршруты в FAST Element определяются с использованием структуры, аналогичной современным SPA-фреймворкам. Основной способ передачи данных через URL — использование параметров маршрута, которые обозначаются как часть пути.
Пример маршрута с параметром:
const routes = [
{ path: '/user/:id', component: UserProfile }
];
Здесь :id является динамическим
сегментом, который будет захвачен роутером и передан
компоненту. Значение параметра можно использовать для загрузки данных,
фильтрации контента или изменения состояния компонента.
FAST Element позволяет получать параметры маршрута внутри компонента
через свойство params объекта
маршрутизатора. При интеграции с FAST Router структура компонента может
выглядеть следующим образом:
import { FASTElement, html, css } from "@microsoft/fast-element";
class UserProfile extends FASTElement {
id;
connectedCallback() {
super.connectedCallback();
this.id = this.$fastRouter.params.id;
this.loadUserData(this.id);
}
async loadUserData(userId) {
const response = await fetch(`/api/users/${userId}`);
this.userData = await response.json();
}
render() {
return html`<div>
<h2>User ID: ${x => x.id}</h2>
<p>${x => x.userData?.name}</p>
</div>`;
}
}
FASTElement.define({ name: 'user-profile', template: html`<div></div>`, styles: css`` }, UserProfile);
Ключевые моменты:
this.$fastRouter.params.${x => x.property}) позволяет обновлять DOM
автоматически при изменении параметра.FAST Router поддерживает не только обязательные параметры, но и необязательные или множественные сегменты.
Пример необязательного параметра:
{ path: '/search/:query?', component: SearchResults }
? указывает на необязательность параметра.undefined.Пример множественного сегмента:
{ path: '/files/*path', component: FileViewer }
*path позволяет захватывать несколько сегментов
маршрута.FAST Element предоставляет возможность реактивно отслеживать изменения параметров, что особенно важно при навигации внутри одного компонента.
class UserProfile extends FASTElement {
id;
paramsChanged(newParams) {
if (newParams.id !== this.id) {
this.id = newParams.id;
this.loadUserData(this.id);
}
}
}
paramsChanged вызывается автоматически при
изменении маршрута.Параметры маршрута можно связывать с свойствами компонента, чтобы автоматически обновлять DOM через FAST binding:
html`<user-profile id="${x => x.$fastRouter.params.id}"></user-profile>`
Маршруты с параметрами часто используются для реализации фильтров и пагинации в интерфейсе:
{ path: '/products/page/:pageNum', component: ProductList }
В компоненте можно обрабатывать pageNum и подгружать
соответствующую страницу данных:
async loadPage(pageNum) {
const response = await fetch(`/api/products?page=${pageNum}`);
this.products = await response.json();
}
Number,
Boolean), так как все параметры маршрута изначально
строковые.decodeURIComponent для корректной обработки специальных
символов.Параметры маршрутов в FAST Element обеспечивают гибкую систему передачи данных через URL, интеграцию с реактивной моделью компонентов и динамическое управление состоянием приложения. Правильное использование параметров упрощает создание SPA с удобной навигацией и поддержкой истории браузера.