FAST Element предоставляет мощный механизм для декларативного
управления DOM через встроенные директивы. Они позволяют изменять
отображение элементов, управлять состояниями и связывать данные без
необходимости ручного манипулирования DOM. Основные встроенные директивы
включают if, repeat, when,
attr, ref, html и
text.
ifДиректива if используется для условного рендеринга
элементов. Она позволяет вставлять или удалять элементы из DOM в
зависимости от логического выражения.
import { html } from "@microsoft/fast-element";
const template = html<MyElement>`
${x => x.show ? html`<p>Элемент отображается</p>` : html``}
`;
Особенности:
display: none.repeatДиректива repeat предназначена для повторения шаблонов
на основе массивов или коллекций.
import { repeat } from "@microsoft/fast-element";
const template = html<MyElement>`
${repeat(x => x.items, html<Item>`<li>${x => x.name}</li>`)}
`;
Преимущества repeat:
repeat(
x => x.items,
html<Item>`<li>${x => x.name}</li>`,
{ key: x => x.id } // уникальный идентификатор для оптимизации
);
whenДиректива when служит для условного рендеринга с
поддержкой альтернативного контента. Она является расширением
if и позволяет указывать блок else.
import { when } from "@microsoft/fast-element";
const template = html<MyElement>`
${when(
x => x.isLoggedIn,
html`<p>Добро пожаловать!</p>`,
html`<p>Пожалуйста, войдите в систему.</p>`
)}
`;
Особенности:
attrДиректива attr используется для динамического управления
атрибутами элементов.
import { attr } from "@microsoft/fast-element";
const template = html<MyElement>`
<button ${x => attr('disabled', x.isDisabled)}>Нажми меня</button>
`;
Ключевые моменты:
disabled,
checked) без ручного присваивания строковых значений.refДиректива ref используется для получения прямой ссылки
на DOM-элемент внутри шаблона.
import { ref } from "@microsoft/fast-element";
const template = html<MyElement>`
<input ${ref('inputElement')} type="text" />
`;
Особенности:
this.inputElement).html и
textДиректива html позволяет вставлять разметку HTML внутри
шаблона, а text — безопасно вставлять текст без
HTML-парсинга.
const template = html<MyElement>`
<div>${x => html`${x.dynamicHtml}`}</div>
<p>${x => text(x.dynamicText)}</p>
`;
Особенности:
html рендерит HTML как шаблон FAST Element.text предотвращает XSS и вставляет только текстовое
содержимое.if или when, в зависимости от необходимости
блока else.repeat с ключами для повышения производительности.attr.ref.html и text в зависимости от безопасности и
типа содержимого.Эти встроенные директивы позволяют создавать реактивные и производительные веб-компоненты, минимизируя ручное управление DOM и делая код шаблонов чистым и декларативным.