FAST Element — это библиотека для создания веб-компонентов на JavaScript с использованием декларативного синтаксиса и реактивного связывания данных. Ключевой этап при работе с FAST Element — регистрация компонентов, которая определяет, как пользовательский элемент будет распознаваться браузером и как он интегрируется с DOM.
В основе любого компонента FAST Element лежит класс, наследуемый от
FASTElement. Создание нового компонента начинается с
объявления класса:
import { FASTElement, html, css } from '@microsoft/fast-element';
class MyComponent extends FASTElement {
firstName = '';
lastName = '';
get fullName() {
return `${this.firstName} ${this.lastName}`;
}
}
Ключевые моменты:
Для визуальной части компонента создается шаблон с помощью функции
html:
const myComponentTemplate = html<MyComponent>`
<div>
<p>Имя: ${x => x.firstName}</p>
<p>Фамилия: ${x => x.lastName}</p>
<p>Полное имя: ${x => x.fullName}</p>
</div>
`;
Особенности шаблона:
${x => x.property} позволяет автоматически
отслеживать изменения свойств и обновлять DOM.if, repeat).Стили для компонента оформляются с использованием функции
css:
const myComponentStyles = css`
p {
font-family: Arial, sans-serif;
color: #333;
}
div {
border: 1px solid #ccc;
padding: 10px;
}
`;
Особенности CSS:
Регистрация компонента выполняется с помощью функции
FASTElement.define. Она связывает тег HTML с классом и
шаблоном:
import { FASTElement, FASTElementDefinition } from '@microsoft/fast-element';
FASTElement.define({
name: 'my-component',
template: myComponentTemplate,
styles: myComponentStyles,
shadowOptions: {
mode: 'open'
}
});
Параметры регистрации:
name — уникальное имя HTML-тега. Должно содержать
дефис, например my-component.template — шаблон компонента, созданный функцией
html.styles — стили компонента, созданные функцией
css.shadowOptions — настройки Shadow DOM. По умолчанию
режим open, но возможен closed.После регистрации компонент становится доступным как обычный HTML-элемент:
<my-component></my-component>
Изменение свойств через JavaScript автоматически отражается в шаблоне:
const element = document.querySelector('my-component');
element.firstName = 'Иван';
element.lastName = 'Иванов';
FASTElement.define({
name: 'my-component',
template: myComponentTemplate,
styles: myComponentStyles,
shadowOptions: {
mode: 'open',
delegatesFocus: true
}
});
import { html, css } from '@microsoft/fast-element';
export const baseTemplate = html<MyComponent>`<slot></slot>`;
export const baseStyles = css`p { margin: 0; }`;
defaultValues:class MyComponent extends FASTElement {
static defaultValues = {
firstName: 'Имя',
lastName: 'Фамилия'
};
}
FAST Element полностью интегрируется с нативной спецификацией Web Components. После регистрации компонента можно использовать все стандартные возможности:
addEventListener)setAttribute, getAttribute)connectedCallback,
disconnectedCallback)Компоненты можно регистрировать динамически на основе условий:
if (!customElements.get('my-component')) {
FASTElement.define({
name: 'my-component',
template: myComponentTemplate,
styles: myComponentStyles
});
}
Это предотвращает ошибку повторной регистрации и позволяет создавать компоненты по требованию.
Зарегистрированные компоненты могут взаимодействовать между собой через:
CustomEventПример передачи данных через события:
class MyComponent extends FASTElement {
sendData() {
this.dispatchEvent(new CustomEvent('data-sent', { detail: { value: 42 }, bubbles: true }));
}
}
Регистрация компонентов в FAST Element является фундаментом для построения масштабируемых, реактивных и модульных пользовательских интерфейсов на базе современных стандартов Web Components.