FAST Element — это библиотека для создания Web Components с использованием декларативного синтаксиса, реактивных свойств и шаблонов. Основной строительный блок интерфейса в FAST Element — шаблон, который определяет, как элемент отображается и реагирует на изменения состояния. В библиотеке выделяются несколько типов шаблонов, каждый из которых имеет свои особенности и области применения.
Наиболее простой способ создания шаблона — использование строки HTML.
Для этого применяется функция html из пакета
@microsoft/fast-element:
import { html } from "@microsoft/fast-element";
const myTemplate = html<MyElement>`
<div class="container">
<h1>${x => x.title}</h1>
<p>${x => x.description}</p>
</div>
`;
Особенности:
Для управления видимостью элементов в шаблоне используется директива
when. Она позволяет рендерить блок только при выполнении
условия:
import { html, when } from "@microsoft/fast-element";
const myTemplate = html<MyElement>`
${when(x => x.isVisible, html<MyElement>`
<p>Элемент видим</p>
`)}
`;
Ключевые моменты:
when — условие, возвращающее
true или false.else).Для работы с массивами данных используется директива
repeat:
import { html, repeat } from "@microsoft/fast-element";
const myTemplate = html<MyElement>`
<ul>
${repeat(x => x.items, html<string>`
<li>${item => item}</li>
`)}
</ul>
`;
Особенности repeat:
repeat(items, template, { key: x => x.id }).FAST Element позволяет привязывать обработчики событий прямо в шаблоне:
import { html } from "@microsoft/fast-element";
const myTemplate = html<MyElement>`
<button @click=${x => x.handleClick()}>Нажми меня</button>
`;
Важные моменты:
@событие позволяет напрямую связать
DOM-события с методами элемента.this, что упрощает
работу с внутренними свойствами.FAST Element поддерживает использование других кастомных элементов внутри шаблонов:
import { html } from "@microsoft/fast-element";
import "./my-child.js";
const myTemplate = html<MyElement>`
<my-child name=${x => x.childName}></my-child>
`;
Особенности:
${x => x.property}.FAST Element позволяет динамически изменять атрибуты и CSS-свойства:
import { html } from "@microsoft/fast-element";
const myTemplate = html<MyElement>`
<div class="box" style="color: ${x => x.color};" title="${x => x.tooltip}">
Содержимое блока
</div>
`;
Ключевые моменты:
classMap (подключается из
@microsoft/fast-element/).FAST Element связывает шаблон с классом элемента через декоратор
@customElement или функцию
FASTElement.define:
import { FASTElement, customElement, html, observable } from "@microsoft/fast-element";
const template = html<MyElement>`
<h1>${x => x.title}</h1>
`;
@customElement({ name: "my-element", template })
class MyElement extends FASTElement {
@observable title = "Пример";
}
Особенности:
@observable, автоматически
обновляют шаблон при изменении.repeat,
when и вложенными компонентами.when) — управление
отображением по логике.repeat) —
рендеринг массивов данных.@event) — привязка
событий к методам элемента.Использование этих типов шаблонов в сочетании позволяет строить гибкие, масштабируемые и полностью реактивные веб-компоненты на базе FAST Element.