Начните с рассмотрения " Должен ли я на самом деле хочу , чтобы это сделать?
У меня нет проблем со ссылками на перечисления непосредственно в 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, была в том, чтобы быть безопасным, не так ли?
Мы все еще можем достичь этого с помощью keyof и некоторой магии машинописи. Это определение функции:
isResponsiveLayout(value: keyof typeof FeatureBoxResponsiveLayout)
{
return FeatureBoxResponsiveLayout[value] == this.featureBoxResponsiveService.layout.value;
}
Обратите внимание на использование FeatureBoxResponsiveLayout[string]
которого преобразует переданное строковое значение в числовое значение перечисления.
Это даст сообщение об ошибке с компиляцией AOT, если вы используете недопустимое значение.
Аргумент типа «H4orizontal» не может быть присвоен параметру типа «Vertical» | «Горизонтальный»
В настоящее время VSCode недостаточно умен, чтобы подчеркнуть его H4orizontal
в редакторе HTML, но вы получите предупреждение во время компиляции (с ключом --prod build или --aot). Это также может быть улучшено в будущем обновлении.