Почніть з того, що "Чи справді я хочу це зробити?"
У мене немає проблем із посиланням на перерахунки безпосередньо в HTML, але в деяких випадках є більш чисті альтернативи, які не втрачають безпеку типу. Наприклад, якщо ви обираєте підхід, показаний в іншій моїй відповіді, можливо, ви оголосили TT у своєму компоненті приблизно так:
public TT =
{
// Enum defines (Horizontal | Vertical)
FeatureBoxResponsiveLayout: FeatureBoxResponsiveLayout
}
Щоб відобразити інший макет у своєму HTML, ви маєте *ngIf
для кожного типу макета, і ви можете звернутися безпосередньо до перерахунку в HTML компонента:
*ngIf="(featureBoxResponsiveService.layout | async) == TT.FeatureBoxResponsiveLayout.Horizontal"
Цей приклад використовує службу для отримання поточного макета, запускає його через трубу асинхронізації, а потім порівнює її з нашим значенням enum. Це досить багатослівно, перекручено і не так весело дивитись. Він також розкриває назву переліків, яка сама може бути надмірно багатослівною.
Альтернативно, що зберігає безпеку типу від HTML
Крім того, ви можете зробити наступне та оголосити більш читану функцію у файлі .ts вашого компонента:
*ngIf="isResponsiveLayout('Horizontal')"
Набагато чистіше! Але що робити, якщо хтось вводить 'Horziontal'
помилково? Вся причина, за якою ви хотіли використовувати enum в HTML, полягала в тому, щоб набрати безпечніше правильно?
Ми все ще можемо досягти цього за допомогою маніпуляції з клавіатурою та деякими машинописними магіями . Це визначення функції:
isResponsiveLayout(value: keyof typeof FeatureBoxResponsiveLayout)
{
return FeatureBoxResponsiveLayout[value] == this.featureBoxResponsiveService.layout.value;
}
Зауважте, використання FeatureBoxResponsiveLayout[string]
якого перетворює передане значення рядка в числове значення перерахунку.
Це дасть повідомлення про помилку при компіляції AOT, якщо ви використовуєте недійсне значення.
Аргумент типу "" H4orizontal "" не призначається параметру типу "" Вертикальний "| "Горизонтальний"
В даний час VSCode недостатньо розумний, щоб підкреслити його H4orizontal
в редакторі HTML, але ви отримаєте попередження під час компіляції (за допомогою --prod build або --aot перемикача). Це також може бути покращено в майбутньому оновлення.