Commencez par considérer «Est-ce que je veux vraiment faire ça?
Je n'ai aucun problème à faire référence aux énumérations directement en HTML, mais dans certains cas, il existe des alternatives plus propres qui ne perdent pas la sécurité de type. Par exemple, si vous choisissez l'approche indiquée dans mon autre réponse, vous avez peut-être déclaré TT dans votre composant quelque chose comme ceci:
public TT =
{
// Enum defines (Horizontal | Vertical)
FeatureBoxResponsiveLayout: FeatureBoxResponsiveLayout
}
Pour afficher une mise en page différente dans votre HTML, vous auriez un *ngIf
pour chaque type de mise en page, et vous pourriez vous référer directement à l'énumération dans le HTML de votre composant:
*ngIf="(featureBoxResponsiveService.layout | async) == TT.FeatureBoxResponsiveLayout.Horizontal"
Cet exemple utilise un service pour obtenir la disposition actuelle, l'exécute via le canal asynchrone, puis la compare à notre valeur d'énumération. C'est assez verbeux, alambiqué et pas très amusant à regarder. Il expose également le nom de l'énumération, qui lui-même peut être trop verbeux.
Alternative, qui conserve la sécurité de type du HTML
Vous pouvez également effectuer les opérations suivantes et déclarer une fonction plus lisible dans le fichier .ts de votre composant:
*ngIf="isResponsiveLayout('Horizontal')"
Beaucoup plus propre! Mais que faire si quelqu'un tape 'Horziontal'
par erreur? La seule raison pour laquelle vous vouliez utiliser une énumération dans le HTML était d'être de type sécurisé, n'est-ce pas?
Nous pouvons toujours y parvenir avec keyof et une certaine magie dactylographiée. Voici la définition de la fonction:
isResponsiveLayout(value: keyof typeof FeatureBoxResponsiveLayout)
{
return FeatureBoxResponsiveLayout[value] == this.featureBoxResponsiveService.layout.value;
}
Notez l'utilisation de FeatureBoxResponsiveLayout[string]
qui convertit la valeur de chaîne transmise en valeur numérique de l'énumération.
Cela donnera un message d'erreur avec une compilation AOT si vous utilisez une valeur non valide.
L'argument de type «H4orizontal» »ne peut pas être affecté au paramètre de type« Vertical »| "Horizontal"
Actuellement, VSCode n'est pas assez intelligent pour être souligné H4orizontal
dans l'éditeur HTML, mais vous recevrez l'avertissement au moment de la compilation (avec le commutateur --prod build ou --aot). Cela peut également être amélioré dans une future mise à jour.