'क्या मैं वास्तव में विचार कर रहा हूं में ऐसा करना चाहता ?'
मुझे सीधे HTML में एनमों को संदर्भित करने में कोई समस्या नहीं है, लेकिन कुछ मामलों में क्लीनर विकल्प हैं जो टाइप-सेफ-नेस नहीं खोते हैं। उदाहरण के लिए यदि आप मेरे अन्य उत्तर में दिखाए गए दृष्टिकोण को चुनते हैं, तो आपने अपने घटक में TT को कुछ इस तरह घोषित किया हो सकता है:
public TT =
{
// Enum defines (Horizontal | Vertical)
FeatureBoxResponsiveLayout: FeatureBoxResponsiveLayout
}
अपने HTML में एक अलग लेआउट दिखाने के लिए, आपके पास *ngIf
प्रत्येक लेआउट प्रकार के लिए होगा, और आप अपने घटक के HTML में सीधे एनम को संदर्भित कर सकते हैं:
*ngIf="(featureBoxResponsiveService.layout | async) == TT.FeatureBoxResponsiveLayout.Horizontal"
यह उदाहरण वर्तमान लेआउट को प्राप्त करने के लिए एक सेवा का उपयोग करता है, इसे async पाइप के माध्यम से चलाता है और फिर इसकी तुलना हमारे enum मान से करता है। यह सुंदर क्रिया है, जटिल और देखने में ज्यादा मजेदार नहीं है। यह एनम के नाम को भी उजागर करता है, जो स्वयं अत्यधिक क्रिया हो सकती है।
वैकल्पिक, जो HTML से प्रकार की सुरक्षा को बरकरार रखता है
वैकल्पिक रूप से आप निम्न कार्य कर सकते हैं, और अपने घटक की .ts फ़ाइल में अधिक पठनीय फ़ंक्शन की घोषणा कर सकते हैं।
*ngIf="isResponsiveLayout('Horizontal')"
बहुत क्लीनर! लेकिन अगर कोई 'Horziontal'
गलती से टाइप करे तो क्या होगा ? संपूर्ण कारण जो आप HTML में एनम का उपयोग करना चाहते थे, वह सही प्रकार से हो सकता है?
हम अभी भी कीफ और कुछ टाइपस्क्रिप्ट जादू के साथ प्राप्त कर सकते हैं । यह फ़ंक्शन की परिभाषा है:
isResponsiveLayout(value: keyof typeof FeatureBoxResponsiveLayout)
{
return FeatureBoxResponsiveLayout[value] == this.featureBoxResponsiveService.layout.value;
}
नोट का उपयोग करें FeatureBoxResponsiveLayout[string]
जो एनम के संख्यात्मक मान में पारित स्ट्रिंग मान को कनवर्ट करता है।
यदि आप अमान्य मान का उपयोग करते हैं तो यह AOT संकलन के साथ एक त्रुटि संदेश देगा।
प्रकार "" H4or क्षैतिज "का तर्क" "कार्यक्षेत्र" प्रकार के पैरामीटर के लिए उपलब्ध नहीं है "क्षैतिज"
वर्तमान में VSCode H4orizontal
HTML संपादक में रेखांकित करने के लिए पर्याप्त स्मार्ट नहीं है , लेकिन आपको संकलन समय (-prod build या --aot switch) के साथ चेतावनी मिलेगी। भविष्य के अपडेट में भी इसमें सुधार किया जा सकता है।