@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' };
}
যা ঘটে তা এখানে:
- আপনার মূল উপাদান তৈরি করা হয়েছে
- ইমেজক্যারোসেল উপাদানটি তৈরি করা হয়েছে এবং
carouselএটিকে নির্ধারিত হয়েছে (ভিউচিল্ডের মাধ্যমে)
- আমরা অ্যাক্সেস করতে পারছি না
carouselযে পর্যন্ত না ngAfterViewInit()(এটা নাল হবে)
- আমরা কনফিগারেশন বরাদ্দ করি, যা সেট করে
style_groupBG = 'red'
- এটি
background: redহোস্ট ইমেজক্যারোসেল উপাদানটিকে পরিবর্তিত করে
- এই উপাদানটি আপনার পিতামাতার উপাদান দ্বারা 'মালিকানাধীন', সুতরাং যখন এটি পরিবর্তনগুলি পরীক্ষা করে তখন এটি পরিবর্তনটি খুঁজে পায়
carousel.style.backgroundএবং এটি চালানোর ক্ষেত্রে যথেষ্ট চালাক নয় যে এটি কোনও সমস্যা নয় তাই এটি ব্যতিক্রম ছোঁড়ে।
একটি সমাধান হ'ল আরেকটি র্যাপার ডিভ ইনডাইডার ইমেজকারোউসেলকে পরিচয় করিয়ে দেওয়া এবং তার উপর পটভূমির রঙ সেট করা, তবে তারপরে আপনি ব্যবহারের কিছু সুবিধা পাবেন না HostBinding(যেমন পিতামাতাকে বস্তুর পুরো সীমানা নিয়ন্ত্রণ করার অনুমতি দেওয়া)।
প্যারেন্ট কম্পোনেন্টের আরও ভাল সমাধান হ'ল কনফিগারটি সেট করার পরে ডিটেক্টচেনজেস () যুক্ত করা।
ngAfterViewInit()
{
this.carousel.carouselConfig = { ... };
this.cdr.detectChanges();
}
এটি দেখতে এটিকে বেশ সুস্পষ্ট বলে মনে হতে পারে এবং অন্যান্য উত্তরের সাথে খুব মিল রয়েছে তবে একটি সূক্ষ্ম পার্থক্য রয়েছে।
@HostBindingউন্নয়নের সময় পর্যন্ত আপনি যে ক্ষেত্রে যুক্ত করবেন না সেই ক্ষেত্রে বিবেচনা করুন । হঠাৎ আপনি এই ত্রুটিটি পেয়ে যান এবং এটি কোনও অর্থবোধ করে বলে মনে হয় না।