' Gerçekten bunu yapmak istiyor muyum ?'
Doğrudan HTML içinde numaralandırma atıfta hiçbir sorunum yok, ancak bazı durumlarda tip güvenliğini kaybetmeyen temiz alternatifler vardır. Örneğin, diğer cevabımda gösterilen yaklaşımı seçerseniz, bileşene TT'yi böyle bir şey bildirmiş olabilirsiniz:
public TT =
{
// Enum defines (Horizontal | Vertical)
FeatureBoxResponsiveLayout: FeatureBoxResponsiveLayout
}
HTML'nizde farklı bir düzen göstermek *ngIfiçin her düzen türü için bir düzeniniz olur ve doğrudan bileşeninizin HTML'sindeki numaralandırmaya başvurabilirsiniz:
*ngIf="(featureBoxResponsiveService.layout | async) == TT.FeatureBoxResponsiveLayout.Horizontal"
Bu örnek, geçerli mizanpajı almak için bir hizmet kullanır, bunu zaman uyumsuz kanal üzerinden çalıştırır ve ardından numaralandırma değerimizle karşılaştırır. Oldukça ayrıntılı, kıvrımlı ve bakmak çok eğlenceli değil. Ayrıca, aşırı derecede ayrıntılı olabilen enumun adını da ortaya koyar.
HTML'den tür güvenliğini koruyan alternatif
Alternatif olarak, aşağıdakileri yapabilir ve bileşeninizin .ts dosyasında daha okunabilir bir işlev bildirebilirsiniz:
*ngIf="isResponsiveLayout('Horizontal')"
Çok daha temiz! Peki ya birisi 'Horziontal'yanlışlıkla girerse ? HTML'de bir numaralandırma kullanmak istemenizin nedeni yazım kurallarına uymaktı değil mi?
Bunu keyof ve bazı daktilo büyüsü ile hala başarabiliriz . Bu fonksiyonun tanımıdır:
isResponsiveLayout(value: keyof typeof FeatureBoxResponsiveLayout)
{
return FeatureBoxResponsiveLayout[value] == this.featureBoxResponsiveService.layout.value;
}
Kullanımını Not FeatureBoxResponsiveLayout[string]hangi dönüştürür enum sayısal değere geçirilen dize değeri.
Geçersiz bir değer kullanırsanız, AOT derlemesine sahip bir hata iletisi verir.
'"H4orizontal"' türünün bağımsız değişkeni, "" Dikey "türündeki parametreye atanamaz | "Yatay"
Şu anda VSCode, H4orizontalHTML düzenleyicisinde altını çizecek kadar akıllı değildir , ancak derleme zamanında uyarıyı alırsınız (--prod build veya --aot anahtarıyla). Bu, gelecekteki bir güncellemede de geliştirilebilir.