Inizia considerando "Voglio davvero farlo?"
Non ho problemi a riferirmi alle enumerazioni direttamente in HTML, ma in alcuni casi ci sono alternative più pulite che non perdono la sicurezza del tipo. Ad esempio, se scegli l'approccio mostrato nell'altra mia risposta, potresti aver dichiarato TT nel tuo componente in questo modo:
public TT =
{
// Enum defines (Horizontal | Vertical)
FeatureBoxResponsiveLayout: FeatureBoxResponsiveLayout
}
Per mostrare un layout diverso nel tuo HTML, ne avresti uno *ngIf
per ogni tipo di layout e potresti fare riferimento direttamente all'enum nell'HTML del tuo componente:
*ngIf="(featureBoxResponsiveService.layout | async) == TT.FeatureBoxResponsiveLayout.Horizontal"
Questo esempio utilizza un servizio per ottenere il layout corrente, lo esegue attraverso la pipe asincrona e quindi lo confronta con il nostro valore enum. È piuttosto prolisso, contorto e poco divertente da guardare. Espone anche il nome dell'enum, che a sua volta può essere eccessivamente prolisso.
Alternativa, che mantiene la sicurezza dei tipi dall'HTML
In alternativa è possibile effettuare le seguenti operazioni e dichiarare una funzione più leggibile nel file .ts del componente:
*ngIf="isResponsiveLayout('Horizontal')"
Molto più pulito! E se qualcuno digitasse 'Horziontal'
per errore? L'intera ragione per cui volevi usare un enum nell'HTML doveva essere dilemma giusto?
Possiamo ancora riuscirci con keyof e qualche magia dattiloscritta. Questa è la definizione della funzione:
isResponsiveLayout(value: keyof typeof FeatureBoxResponsiveLayout)
{
return FeatureBoxResponsiveLayout[value] == this.featureBoxResponsiveService.layout.value;
}
Si noti l'utilizzo del FeatureBoxResponsiveLayout[string]
quale converte il valore stringa passata al valore numerico della enum.
Questo darà un messaggio di errore con una compilazione AOT se si utilizza un valore non valido.
L'argomento di tipo '"H4orizontal"' non è assegnabile al parametro di tipo "" Verticale "| "Orizzontale"
Attualmente VSCode non è abbastanza intelligente da sottolineare H4orizontal
nell'editor HTML, ma riceverai l'avviso in fase di compilazione (con --prod build o --aot switch). Anche questo potrebbe essere migliorato in un futuro aggiornamento.