html — это ключевая функция в библиотеке FAST Element,
используемая для описания шаблонов компонентов. Она является Tagged
Template Literal и позволяет создавать декларативные шаблоны с
поддержкой реактивности и биндингов. Основное назначение
html — связывать HTML-разметку с данными компонентов и
обеспечивать её динамическое обновление при изменении состояния.
Функция html вызывается с использованием синтаксиса
шаблонных литералов:
import { html } from "@microsoft/fast-element";
const template = html`<div>Hello, ${x => x.name}!</div>`;
Особенности синтаксиса:
${} могут быть функциями, которые
принимают объект данных компонента (x) и возвращают
значение для вставки.Атрибуты элементов можно связывать с реактивными свойствами
компонента. Для этого используется синтаксис
${x => x.property}:
const buttonTemplate = html`
<button disabled="${x => x.isDisabled}">
${x => x.label}
</button>
`;
Особенности:
null или
undefined, атрибут удаляется из DOM.Для вставки текста применяется стандартная конструкция
${}. Для безопасного вставления HTML используется директива
html внутри шаблона:
const contentTemplate = html`
<div>${x => x.text}</div>
<div>${x => html`${x.rawHtml}`}</div>
`;
В FAST Element поддерживаются условные конструкции с использованием тернарного оператора или встроенных директив:
import { when } from "@microsoft/fast-element";
const conditionalTemplate = html`
${when(
x => x.isVisible,
html`<p>Элемент видим</p>`,
html`<p>Элемент скрыт</p>`
)}
`;
when принимает условие и два шаблона: для истинного и
ложного случая.Повторение элементов реализуется через директиву
repeat:
import { repeat } from "@microsoft/fast-element";
const listTemplate = html`
<ul>
${repeat(
x => x.items,
html`<li>${item => item}</li>`
)}
</ul>
`;
repeat — источник данных
(массив).События можно связывать через синтаксис @event:
const clickTemplate = html`
<button @click="${x => x.handleClick()}">Нажми меня</button>
`;
click,
input, change и др.).html поддерживает вложенные шаблоны и работу со
слотами:
const cardTemplate = html`
<div class="card">
<slot name="header"></slot>
<div class="content">
${x => x.content}
</div>
<slot></slot>
</div>
`;
Шаблоны могут быть объединены для повторного использования компонентов:
const headerTemplate = html`<h1>${x => x.title}</h1>`;
const pageTemplate = html`
${headerTemplate}
<p>${x => x.description}</p>
`;
Любое выражение внутри ${} автоматически становится
реактивным:
const reactiveTemplate = html`
<p>${x => x.count * 2}</p>
`;
count FAST Element обновит DOM без
необходимости дополнительного кода.Синтаксис html в FAST Element сочетает декларативность,
модульность и высокую производительность. Он обеспечивает полный
контроль над DOM через реактивные выражения, условные и циклические
конструкции, обработку событий и вложенные шаблоны, что делает
разработку компонентов удобной и гибкой.