@HostBinding
इस त्रुटि का एक भ्रामक स्रोत हो सकता है।
उदाहरण के लिए, हम कहते हैं कि आपके पास घटक में निम्नलिखित होस्ट बाइंडिंग है
// image-carousel.component.ts
@HostBinding('style.background')
style_groupBG: string;
सादगी के लिए, इस संपत्ति को निम्नलिखित इनपुट संपत्ति के माध्यम से अद्यतन किया गया है:
@Input('carouselConfig')
public set carouselConfig(carouselConfig: string)
{
this.style_groupBG = carouselConfig.bgColor;
}
मूल घटक में आप इसे प्रोग्रामेटिक रूप से सेट कर रहे हैं ngAfterViewInit
@ViewChild(ImageCarousel) carousel: ImageCarousel;
ngAfterViewInit()
{
this.carousel.carouselConfig = { bgColor: 'red' };
}
यहाँ क्या होता है:
- आपका मूल घटक बनाया गया है
- ImageCarousel घटक बनाया गया है, और
carousel
ViewChild के माध्यम से सौंपा गया है
- हम
carousel
तब तक पहुँच नहीं सकते हैं ngAfterViewInit()
(यह शून्य होगा)
- हम कॉन्फ़िगरेशन असाइन करते हैं, जो सेट करता है
style_groupBG = 'red'
- यह
background: red
मेजबान ImageCarousel घटक पर बदले में सेट होता है
- यह घटक आपके मूल घटक का 'स्वामित्व' है, इसलिए जब यह परिवर्तनों की जाँच करता है तो इसे एक परिवर्तन मिलता है
carousel.style.background
और यह जानने के लिए पर्याप्त चतुर नहीं है कि यह कोई समस्या नहीं है इसलिए यह अपवाद फेंकता है।
एक समाधान के लिए एक और रैपर div अंदरूनी सूत्र ImageCarousel शुरू करने और उस पर पृष्ठभूमि का रंग सेट करने के लिए है, लेकिन तब आपको उपयोग करने के कुछ लाभ नहीं मिलते हैं HostBinding
(जैसे कि माता-पिता को ऑब्जेक्ट के पूर्ण सीमा को नियंत्रित करने की अनुमति देना)।
पैरेंट घटक में बेहतर समाधान, विन्यास सेट करने के बाद डिटेचेंजेज () जोड़ना है।
ngAfterViewInit()
{
this.carousel.carouselConfig = { ... };
this.cdr.detectChanges();
}
यह इस तरह से स्पष्ट रूप से सेट किया हुआ लग सकता है, और अन्य उत्तरों के समान है लेकिन सूक्ष्म अंतर है।
उस मामले पर विचार करें जहां आप @HostBinding
विकास के दौरान बाद में नहीं जोड़ते हैं । अचानक आपको यह त्रुटि मिलती है और इसका कोई मतलब नहीं है।