Comece considerando 'Eu realmente quero fazer isso?'
Não tenho problema em me referir a enumerações diretamente em HTML, mas em alguns casos existem alternativas mais limpas que não perdem a segurança de tipo. Por exemplo, se você escolher a abordagem mostrada na minha outra resposta, poderá ter declarado TT no seu componente algo como isto:
public TT =
{
// Enum defines (Horizontal | Vertical)
FeatureBoxResponsiveLayout: FeatureBoxResponsiveLayout
}
Para mostrar um layout diferente no seu HTML, você deve ter um *ngIf
para cada tipo de layout e pode se referir diretamente à enumeração no HTML do seu componente:
*ngIf="(featureBoxResponsiveService.layout | async) == TT.FeatureBoxResponsiveLayout.Horizontal"
Este exemplo usa um serviço para obter o layout atual, executa-o através do canal assíncrono e depois o compara ao nosso valor de enumeração. É bem detalhado, complicado e pouco divertido de se ver. Também expõe o nome da enum, que por si só pode ser excessivamente detalhado.
Alternativa, que mantém a segurança de tipo do HTML
Como alternativa, você pode fazer o seguinte e declarar uma função mais legível no arquivo .ts do seu componente:
*ngIf="isResponsiveLayout('Horizontal')"
Muito mais limpo! Mas e se alguém digitar 'Horziontal'
por engano? Todo o motivo pelo qual você queria usar uma enumeração no HTML era ser tipicamente seguro, certo?
Ainda podemos conseguir isso com keyof e alguma mágica datilografada. Esta é a definição da função:
isResponsiveLayout(value: keyof typeof FeatureBoxResponsiveLayout)
{
return FeatureBoxResponsiveLayout[value] == this.featureBoxResponsiveService.layout.value;
}
Observe o uso do FeatureBoxResponsiveLayout[string]
qual converte o valor da seqüência de caracteres passado para o valor numérico da enumeração.
Isso fornecerá uma mensagem de erro com uma compilação AOT se você usar um valor inválido.
O argumento do tipo '"H4orizontal"' não é atribuível ao parâmetro do tipo '"Vertical" | "Horizontal"
Atualmente, o VSCode não é inteligente o suficiente para sublinhar H4orizontal
no editor de HTML, mas você receberá o aviso em tempo de compilação (com --prod build ou --aot switch). Isso também pode ser aprimorado em uma atualização futura.