FAST Element — это современная библиотека для создания веб-компонентов на базе стандарта Custom Elements с мощной реактивностью и декларативным синтаксисом. Одной из важнейших возможностей является работа с атрибутами, которые напрямую связываются с состоянием компонента. Числовые атрибуты требуют особого подхода, так как HTML передает их как строки, а в коде часто необходимы именно числа.
В FAST Element числовые атрибуты определяются с помощью декоратора
@attr или метода attr. Для преобразования
строки атрибута в число используется параметр
converter.
import { FASTElement, attr } from "@microsoft/fast-element";
export class Counter extends FASTElement {
@attr({ converter: FASTElement.numberConverter })
value;
}
В этом примере:
value — числовой атрибут компонента
<counter>.FASTElement.numberConverter автоматически преобразует
строки в числа и обратно при чтении и записи атрибута.Приведение типов HTML всегда передает атрибуты как строки. Без конвертера числовые значения будут храниться как строки, что приведет к некорректным вычислениям:
this.value + 1 // если this.value = "5", результат = "51"
С numberConverter результат вычислений будет корректным
числом.
Обработка отсутствующих значений Если атрибут не
задан, FAST Element устанавливает значение null по
умолчанию. Это важно учитывать при математических операциях:
if (this.value === null) {
this.value = 0;
}Реактивность Любое изменение числового атрибута через свойство автоматически обновляет DOM, если атрибут используется в шаблоне:
import { html, FASTElement } from "@microsoft/fast-element";
export class Counter extends FASTElement {
@attr({ converter: FASTElement.numberConverter })
value;
increment() {
this.value++;
}
}
const template = html<Counter>`
<button @click="${x => x.increment()}">Увеличить</button>
<p>Значение: ${x => x.value}</p>
`;Числовые атрибуты можно дополнительно проверять и ограничивать. Например, можно реализовать минимальное и максимальное значение через геттер/сеттер:
@attr({ converter: FASTElement.numberConverter })
value;
set value(v) {
const number = Math.max(0, Math.min(100, v));
this.$value = number;
}
get value() {
return this.$value ?? 0;
}
Такой подход предотвращает выход значения за допустимые пределы.
Для чисел, записанных в нестандартных форматах (например, с запятой или суффиксом), можно создавать собственные конвертеры:
const customNumberConverter = {
fromAttribute(value) {
return parseFloat(value.replace(',', '.'));
},
toAttribute(value) {
return value.toString();
}
};
@attr({ converter: customNumberConverter })
price;
Это позволяет компоненты работать с локализованными данными или специфическими форматами.
В шаблоне FAST Element числовые значения можно использовать напрямую. При этом привязка работает с реактивностью, и любое изменение свойства обновляет отображение:
const template = html<MyComponent>`
<div>Счётчик: ${x => x.value}</div>
<button @click="${x => x.value += 5}">Добавить 5</button>
`;
Важный момент — в шаблоне не нужно вручную преобразовывать типы, если
использован numberConverter.
Числовые атрибуты часто связаны с событиями изменения состояния:
increment() {
this.value++;
this.$emit('value-changed', { detail: this.value });
}
Подписчики компонента получают числовое значение без необходимости ручного преобразования.
FASTElement.numberConverter для простых
чисел.null при отсутствии атрибута.Числовые атрибуты в FAST Element предоставляют удобный способ работы с числами напрямую через HTML и JavaScript, обеспечивая типовую безопасность и реактивное обновление интерфейса. Их грамотное использование позволяет создавать сложные компоненты с минимальным количеством ручного кода.