5

मैं एक घटक बना रहा हूँ। चूंकि मुझे चीजों को करने का अपाचे विकेट तरीका पसंद है, इसलिए मैं डेटा पास करने के IModel अनुकरण का अनुकरण करने की कोशिश कर रहा हूं। इसके लिए, बाल घटक के लिए मैं एक मॉडल और कॉलबैक पास करता हूं जो डेटा को आगे बढ़ाने के लिए फ़ंक्शन को कॉल करने के बजाय प्रासंगिक मान खींच सकता है।कोणीय 2: कुछ आदेश में @ इनपुट सेटर्स कैसे कहा जाता है?

समस्या यह है कि नए सेट मॉडल का संचालन कॉलबैक का उपयोग करता है। तो यदि कॉलबैक सेट होने से पहले मॉडल सेटर को कॉल किया जाता है, तो कोणीय क्रैश हो जाता है।
वर्कअराउंड: उन क्रियाओं को स्थगित करें जिन्हें कॉलबैक की आवश्यकता ngAfterViewInit() या ऐसी है।

संक्षेप में:

  • मैं कैसे जिस क्रम में @Inputs सेट कर रहे हैं नियंत्रित कर सकते हैं?
  • क्या मैं स्रोत कोड में ऑर्डर पर भरोसा कर सकता हूं?

उदाहरण: (यहाँ आदेश को बदलने के क्रम में परिवर्तन नहीं होता)

  <wu-checkboxes [groupName]="'includedApps'" 
          [options]="availableApps" 
          [valueCallback]="appsValueCallback" 
          [labelCallback]="appsLabelCallback" 
      > 
: उस बच्चे घटक का उपयोग

@Input() 
valueCallback: (item: any) => string 
    = app => { throw new Error("valueCallback not yet defined."); }; 

@Input() 
labelCallback: (item: ItemType) => string; 

टेम्पलेट (यहां क्रम बदलने काम करने के लिए लगता है)

जैसा कि मैंने ऊपर उल्लेख किया है, Angular2 @Input वर्ग के सदस्यों के आदेश का पालन करता है और उन्हें उस क्रम में सेट/कॉल करता है। सवाल यह है कि, क्या वास्तव में या डी-ज्यूर है? मैं उन सुविधाओं पर भरोसा नहीं करना चाहता हूं जो काम करते हैं क्योंकि वर्तमान में यह इस तरह से कोडित है। मुझे जावास्क्रिप्ट प्रतिबिंब के बारे में बहुत कुछ पता नहीं है, इसलिए मैं यह नहीं बता सकता कि यह हर जगह काम करने जा रहा है या नहीं।

उत्तर

3

आप ngOnChanges() का उपयोग कर सकते हैं जिसे प्रत्येक बार @Input() को बदलने का पता लगाया जाता है। आप ngOnChanges के भीतर जांच सकते हैं कि सभी इनपुट मान पहले से ही उपलब्ध हैं और फिर अपना कोड निष्पादित करें। हालांकि आपको खुद को ध्यान रखना होगा, कि बाद के अपडेट फ़ंक्शन कॉल को फिर से ट्रिगर नहीं करते हैं (यदि यह वांछित नहीं है)।

अद्यतन

बाइंडिंग (मूल्य बाइंडिंग और घटना बाइंडिंग) के आदेश Angular2 में अपरिभाषित है और इसलिए आप एक विशेष क्रम पर भरोसा नहीं कर सकते हैं।

+0

टिप के लिए धन्यवाद। यही दृष्टिकोण है जिसका अर्थ है 'ngAfterViewInit() या ऐसे' और 'से बचना चाहते हैं। इसके लिए कुछ बॉयलरप्लेट कोड की आवश्यकता है और यह है, मुझे डर है, त्रुटि-प्रवण। –

+0

इनपुट के लिए कोई निर्दिष्ट आदेश नहीं है, इसलिए संभावना है कि आप इससे बच सकते हैं। –

+0

सही लगता है। इसे उत्तर में डालने के बारे में और मैं स्वीकार करूंगा –

संबंधित मुद्दे