Beginnen Sie mit der Überlegung, ob ich das wirklich tun möchte.
Ich habe kein Problem damit, auf Enums direkt in HTML zu verweisen, aber in einigen Fällen gibt es sauberere Alternativen, die die Typensicherheit nicht verlieren. Wenn Sie beispielsweise den in meiner anderen Antwort gezeigten Ansatz wählen, haben Sie möglicherweise TT in Ihrer Komponente wie folgt deklariert:
public TT =
{
// Enum defines (Horizontal | Vertical)
FeatureBoxResponsiveLayout: FeatureBoxResponsiveLayout
}
Um ein anderes Layout in Ihrem HTML-Code anzuzeigen, haben Sie *ngIf
für jeden Layouttyp ein Layout, und Sie können direkt auf die Aufzählung im HTML-Code Ihrer Komponente verweisen:
*ngIf="(featureBoxResponsiveService.layout | async) == TT.FeatureBoxResponsiveLayout.Horizontal"
In diesem Beispiel wird ein Dienst verwendet, um das aktuelle Layout abzurufen, es durch die asynchrone Pipe auszuführen und es dann mit unserem Aufzählungswert zu vergleichen. Es ist ziemlich ausführlich, verschlungen und macht nicht viel Spaß, es anzuschauen. Es enthüllt auch den Namen der Aufzählung, die selbst zu ausführlich sein kann.
Alternativ bleibt die Typensicherheit des HTML-Codes erhalten
Alternativ können Sie Folgendes tun und eine besser lesbare Funktion in der .ts-Datei Ihrer Komponente deklarieren:
*ngIf="isResponsiveLayout('Horizontal')"
Viel sauberer! Aber was ist, wenn jemand versehentlich 'Horziontal'
tippt? Der ganze Grund, warum Sie eine Aufzählung im HTML verwenden wollten, war typsicher zu sein, oder?
Wir können das immer noch mit keyof und etwas Typoskript-Magie erreichen. Dies ist die Definition der Funktion:
isResponsiveLayout(value: keyof typeof FeatureBoxResponsiveLayout)
{
return FeatureBoxResponsiveLayout[value] == this.featureBoxResponsiveService.layout.value;
}
Beachten Sie, bei FeatureBoxResponsiveLayout[string]
welcher Verwendung der übergebene Zeichenfolgenwert in den numerischen Wert der Aufzählung konvertiert wird .
Dies gibt eine Fehlermeldung mit einer AOT-Kompilierung aus, wenn Sie einen ungültigen Wert verwenden.
Das Argument vom Typ '"H4orizontal"' kann nicht dem Parameter vom Typ '"Vertikal" | zugewiesen werden "Horizontal"
Derzeit ist VSCode nicht intelligent genug, um H4orizontal
im HTML-Editor zu unterstreichen , aber Sie erhalten die Warnung beim Kompilieren (mit --prod build oder --aot switch). Dies kann auch in einem zukünftigen Update verbessert werden.