Zacznij od rozważenia „Czy naprawdę chcę to zrobić?”
Nie mam problemu z odwołaniem się do wyliczeń bezpośrednio w HTML, ale w niektórych przypadkach istnieją czystsze alternatywy, które nie tracą bezpieczeństwa typów. Na przykład, jeśli wybierzesz podejście pokazane w mojej drugiej odpowiedzi, być może zadeklarowałeś TT w swoim komponencie mniej więcej tak:
public TT =
{
// Enum defines (Horizontal | Vertical)
FeatureBoxResponsiveLayout: FeatureBoxResponsiveLayout
}
Aby pokazać inny układ w kodzie HTML, musisz mieć *ngIf
dla każdego typu układu i możesz odwołać się bezpośrednio do wyliczenia w kodzie HTML swojego komponentu:
*ngIf="(featureBoxResponsiveService.layout | async) == TT.FeatureBoxResponsiveLayout.Horizontal"
W tym przykładzie użyto usługi, aby uzyskać bieżący układ, przepuszcza go przez potok asynchroniczny, a następnie porównuje go z naszą wartością wyliczenia. Jest dość rozwlekły, zawiły i niezbyt przyjemny do oglądania. Ujawnia również nazwę wyliczenia, która sama w sobie może być zbyt szczegółowa.
Alternatywa, która zachowuje bezpieczeństwo typów z kodu HTML
Alternatywnie możesz wykonać następujące czynności i zadeklarować bardziej czytelną funkcję w pliku .ts swojego komponentu:
*ngIf="isResponsiveLayout('Horizontal')"
Dużo czystsze! Ale co, jeśli ktoś 'Horziontal'
przez pomyłkę wpisze ? Powodem, dla którego chciałeś użyć wyliczenia w kodzie HTML, była ochrona przed typami, prawda?
Nadal możemy to osiągnąć dzięki keyof i pewnej magii maszynopisu. Oto definicja funkcji:
isResponsiveLayout(value: keyof typeof FeatureBoxResponsiveLayout)
{
return FeatureBoxResponsiveLayout[value] == this.featureBoxResponsiveService.layout.value;
}
Uwaga Wykorzystanie FeatureBoxResponsiveLayout[string]
który konwertuje wartość ciągu przekazywana do wartości liczbowej wyliczenia.
Spowoduje to wyświetlenie komunikatu o błędzie z kompilacją AOT, jeśli użyjesz nieprawidłowej wartości.
Argumentu typu „H4orizontal” nie można przypisać do parametru typu „Vertical” | "Poziomy"
Obecnie VSCode nie jest wystarczająco inteligentny, aby podkreślać H4orizontal
w edytorze HTML, ale ostrzeżenie zostanie wyświetlone w czasie kompilacji (za pomocą opcji --prod build lub --aot). To również może zostać poprawione w przyszłej aktualizacji.