Mulailah dengan mempertimbangkan, 'Apakah saya benar - benar ingin melakukan ini?'
Saya tidak punya masalah merujuk langsung ke enums dalam HTML, tetapi dalam beberapa kasus ada alternatif yang lebih bersih yang tidak kehilangan jenis keamanan. Misalnya jika Anda memilih pendekatan yang ditunjukkan dalam jawaban saya yang lain, Anda mungkin telah menyatakan TT dalam komponen Anda, seperti ini:
public TT =
{
// Enum defines (Horizontal | Vertical)
FeatureBoxResponsiveLayout: FeatureBoxResponsiveLayout
}
Untuk menampilkan tata letak yang berbeda di HTML Anda, Anda akan memiliki *ngIf
untuk setiap jenis tata letak, dan Anda bisa merujuk langsung ke enum di HTML komponen Anda:
*ngIf="(featureBoxResponsiveService.layout | async) == TT.FeatureBoxResponsiveLayout.Horizontal"
Contoh ini menggunakan layanan untuk mendapatkan tata letak saat ini, menjalankannya melalui pipa async dan kemudian membandingkannya dengan nilai enum kami. Sangat bertele-tele, berbelit-belit dan tidak menyenangkan untuk dilihat. Itu juga memperlihatkan nama enum, yang itu sendiri mungkin terlalu bertele-tele.
Alternatif, yang mempertahankan keamanan jenis dari HTML
Atau Anda dapat melakukan hal berikut, dan mendeklarasikan fungsi yang lebih mudah dibaca dalam file .ts komponen Anda:
*ngIf="isResponsiveLayout('Horizontal')"
Jauh lebih bersih! Tetapi bagaimana jika seseorang mengetik 'Horziontal'
secara tidak sengaja? Seluruh alasan Anda ingin menggunakan enum dalam HTML adalah untuk mengetik dengan benar, bukan?
Kita masih bisa mencapainya dengan keyof dan beberapa sihir naskah. Ini adalah definisi fungsi:
isResponsiveLayout(value: keyof typeof FeatureBoxResponsiveLayout)
{
return FeatureBoxResponsiveLayout[value] == this.featureBoxResponsiveService.layout.value;
}
Perhatikan penggunaan FeatureBoxResponsiveLayout[string]
yang mengubah nilai string yang diteruskan ke nilai numerik enum.
Ini akan memberikan pesan kesalahan dengan kompilasi AOT jika Anda menggunakan nilai yang tidak valid.
Argumen tipe '"H4orizontal"' tidak dapat dialihkan ke parameter tipe '"Vertikal" | "Horisontal"
Saat ini VSCode tidak cukup pintar untuk menggarisbawahi H4orizontal
dalam editor HTML, tetapi Anda akan mendapatkan peringatan pada waktu kompilasi (dengan --prod build atau --aot switch). Ini juga dapat ditingkatkan pada pembaruan di masa mendatang.