Comience por considerar '¿ Realmente quiero hacer esto?'
No tengo ningún problema para referirme a las enumeraciones directamente en HTML, pero en algunos casos hay alternativas más limpias que no pierden la seguridad de escritura. Por ejemplo, si elige el enfoque que se muestra en mi otra respuesta, puede haber declarado TT en su componente algo como esto:
public TT =
{
// Enum defines (Horizontal | Vertical)
FeatureBoxResponsiveLayout: FeatureBoxResponsiveLayout
}
Para mostrar un diseño diferente en su HTML, tendría un *ngIf
para cada tipo de diseño, y podría referirse directamente a la enumeración en el HTML de su componente:
*ngIf="(featureBoxResponsiveService.layout | async) == TT.FeatureBoxResponsiveLayout.Horizontal"
Este ejemplo utiliza un servicio para obtener el diseño actual, lo ejecuta a través de la tubería asíncrona y luego lo compara con nuestro valor de enumeración. Es bastante detallado, complicado y no es muy divertido de ver. También expone el nombre de la enumeración, que en sí misma puede ser demasiado verbosa.
Alternativa, que conserva la seguridad de tipo del HTML
Alternativamente, puede hacer lo siguiente y declarar una función más legible en el archivo .ts de su componente:
*ngIf="isResponsiveLayout('Horizontal')"
Mucho más limpio! Pero, ¿qué pasa si alguien escribe 'Horziontal'
por error? Toda la razón por la que querías usar una enumeración en el HTML era para ser seguro.
Aún podemos lograr eso con keyof y algo de magia mecanografiada. Esta es la definición de la función:
isResponsiveLayout(value: keyof typeof FeatureBoxResponsiveLayout)
{
return FeatureBoxResponsiveLayout[value] == this.featureBoxResponsiveService.layout.value;
}
Tenga en cuenta el uso de FeatureBoxResponsiveLayout[string]
que convierte el valor de cadena pasado en el valor numérico de la enumeración.
Esto dará un mensaje de error con una compilación AOT si usa un valor no válido.
El argumento del tipo '"H4orizontal"' no se puede asignar al parámetro del tipo '"Vertical" | "Horizontal"
Actualmente, VSCode no es lo suficientemente inteligente como para subrayar H4orizontal
en el editor HTML, pero recibirá la advertencia en el momento de la compilación (con --prod build o --aot switch). Esto también puede mejorarse en una futura actualización.