पहले, ध्यान दें कि यह अपवाद केवल तब फेंका जाएगा जब आप अपना ऐप देव मोड में चला रहे हों (जो कि डिफ़ॉल्ट रूप से बीटा -0 के रूप में है): यदि आप enableProdMode()
ऐप को बूटस्ट्रैप करते समय कॉल करते हैं, तो यह फेंका नहीं जाएगा ( देखें अद्यतन प्लंक )।
दूसरा, ऐसा न करें क्योंकि यह अपवाद अच्छे कारण के लिए फेंका जा रहा है: संक्षेप में, जब देव मोड में, परिवर्तन का पता लगाने के हर दौर के तुरंत बाद एक दूसरा दौर होता है, जो सत्यापित करता है कि पहले के अंत से कोई बाइंडिंग नहीं बदली है, जैसा कि यह इंगित करेगा कि परिवर्तन का पता लगाने के कारण ही परिवर्तन हो रहे हैं।
आपके प्लंक में, {{message}}
आपके कॉल द्वारा बाइंडिंग को बदल दिया जाता है setMessage()
, जो ngAfterViewInit
हुक में होता है , जो प्रारंभिक परिवर्तन का पता लगाने वाले मोड़ के एक हिस्से के रूप में होता है। हालांकि यह अपने आप में समस्याग्रस्त नहीं है - समस्या यह है कि यह setMessage()
परिवर्तन को बदल देता है लेकिन परिवर्तन का पता लगाने के एक नए दौर को ट्रिगर नहीं करता है, जिसका अर्थ है कि इस परिवर्तन का पता तब तक नहीं चलेगा जब तक कि भविष्य के परिवर्तन का पता लगाने का दौर कहीं और शुरू न हो जाए।
टेकअवे: कोई भी चीज़ जो किसी परिवर्तन को बदल देती है उसे परिवर्तन का पता लगाने के एक दौर को शुरू करने की आवश्यकता होती है।
उदाहरण के लिए सभी अनुरोधों के जवाब में अपडेट करें कि कैसे करें : @ टिको का समाधान काम करता है, जैसा कि उत्तर में तीन तरीके @ मर्कराजोक ने बताया है। लेकिन स्पष्ट रूप से, वे सभी मेरे लिए बदसूरत और गलत महसूस करते हैं, जैसे हैक की तरह हमें एनजी 1 पर झुकाव करने की आदत है।
यह सुनिश्चित करने के लिए कि कभी-कभार ऐसी परिस्थितियाँ होती हैं जहाँ ये हैक उपयुक्त होते हैं, लेकिन यदि आप इनका उपयोग बहुत अधिक सामयिक आधार पर कर रहे हैं, तो यह एक संकेत है कि आप इसकी प्रतिक्रियाशील प्रकृति को पूरी तरह से अपनाने के बजाय रूपरेखा से लड़ रहे हैं।
IMHO, एक और अधिक मुहावरेदार, "एंगुलर 2 तरीका" जो इस के निकट है: ( प्लंक ) की तर्ज पर कुछ
@Component({
selector: 'my-app',
template: `<div>I'm {{message | async}} </div>`
})
export class App {
message:Subject<string> = new BehaviorSubject('loading :(');
ngAfterViewInit() {
this.message.next('all done loading :)')
}
}
ExpressionChangedAfterItHasBeenCheckedError
त्रुटि के बारे में जानने के लिए आवश्यक सब कुछ महान विवरणों में व्यवहार की व्याख्या करता है।