В библиотеке FAST Element атрибуты компонентов играют центральную роль в управлении состоянием элементов и их реакцией на изменения данных. Атрибуты могут связывать данные, свойства и поведение компонентов, обеспечивая реактивность и синхронизацию между DOM и логикой приложения. FAST Element предоставляет гибкую систему определения и контроля типов атрибутов, включая стандартные, boolean, числовые и сложные кастомные типы.
Стандартные атрибуты — это обычные свойства HTML-элементов, которые
можно объявлять в классе компонента через декоратор @attr.
Пример базового определения:
import { FASTElement, attr } from "@microsoft/fast-element";
class MyElement extends FASTElement {
@attr title; // string по умолчанию
@attr subtitle; // ещё один строковый атрибут
}
По умолчанию все атрибуты интерпретируются как строки, если не указан иной тип. Любое присвоение значения автоматически конвертируется в строку при отображении в DOM:
В JavaScript доступ к этим атрибутам через свойства:
const elem = document.querySelector("my-element");
console.log(elem.title); // "Главный заголовок"
Для флагов и логических значений используется тип
boolean. В FAST Element Boolean-атрибуты работают по
HTML-спецификации, где присутствие атрибута означает
true, а отсутствие — false.
import { FASTElement, attr } from "@microsoft/fast-element";
class ToggleButton extends FASTElement {
@attr({ mode: "boolean" }) active;
}
Использование в HTML:
В первом примере свойство active будет
true, во втором — false. Важно, что при
изменении свойства через JS значение синхронизируется с DOM
автоматически:
const btn = document.querySelector("toggle-button");
btn.active = false; // атрибут active удаляется из DOM
btn.active = true; // атрибут active добавляется в DOM
Числовые атрибуты используют конструктор Number для
приведения значения:
class Counter extends FASTElement {
@attr({ converter: Number }) count;
}
Любое присвоение строки автоматически преобразуется в число:
const counter = document.querySelector("counter");
console.log(counter.count); // 10 (тип number)
Если значение не может быть преобразовано, результатом будет
NaN, что требует обработки в коде.
FAST Element позволяет создавать собственные конвертеры для сложных
типов атрибутов, таких как объекты, массивы или специфические форматы.
Конвертер реализуется как объект с методами fromView и
toView:
function jsonConverter() {
return {
fromView(value) {
try {
return JSON.parse(value);
} catch {
return {};
}
},
toView(value) {
return JSON.stringify(value);
}
};
}
class DataElement extends FASTElement {
@attr({ converter: jsonConverter() }) data;
}
Использование:
const el = document.querySelector("data-element");
console.log(el.data.name); // John
Кастомные конвертеры обеспечивают двустороннюю синхронизацию сложных структур между DOM и объектной моделью.
FAST Element поддерживает наблюдение изменений атрибутов с помощью реактивных свойств и методов жизненного цикла:
class ObservableElement extends FASTElement {
@attr({ mode: "boolean" }) visible;
visibleChanged(oldValue, newValue) {
console.log(`visible изменилось с ${oldValue} на ${newValue}`);
}
}
Метод visibleChanged автоматически вызывается при любом
изменении свойства visible. Это позволяет
интегрировать логику обновления интерфейса напрямую с изменением
атрибутов.
propertyChanged.Каждый тип атрибута в FAST Element обеспечивает чёткую реактивность, автоматическое преобразование значений и согласованность между свойствами объекта и атрибутами DOM. Это позволяет создавать интерактивные компоненты с минимальной ручной синхронизацией.