दरअसल, एंगुलर 2 + में चाइल्ड कंपोनेंट में इनपुट परिवर्तन होने पर पता लगाने और अभिनय करने के दो तरीके हैं:
- आप ngOnChanges () जीवन चक्र विधि का उपयोग कर सकते हैं जैसा कि पुराने उत्तरों में भी उल्लेख किया गया है:
@Input() categoryId: string;
ngOnChanges(changes: SimpleChanges) {
this.doSomething(changes.categoryId.currentValue);
// You can also use categoryId.previousValue and
// categoryId.firstChange for comparing old and new values
}
प्रलेखन लिंक: ngOnChanges, SimpleChanges, SimpleChange
डेमो उदाहरण: इस प्लंकर को देखें
- वैकल्पिक रूप से, आप इनपुट संपत्ति सेटर का उपयोग निम्नानुसार भी कर सकते हैं :
private _categoryId: string;
@Input() set categoryId(value: string) {
this._categoryId = value;
this.doSomething(this._categoryId);
}
get categoryId(): string {
return this._categoryId;
}
प्रलेखन लिंक: यहाँ देखें ।
डेमो उदाहरण: इस प्लंकर को देखें ।
जो आप का उपयोग करना चाहते हैं?
यदि आपके घटक में कई इनपुट हैं, तो, यदि आप ngOnChanges () का उपयोग करते हैं, तो आपको ngOnChanges () के भीतर एक बार में सभी इनपुट के लिए सभी परिवर्तन मिलेंगे। इस दृष्टिकोण का उपयोग करके, आप इनपुट के वर्तमान और पिछले मूल्यों की तुलना भी कर सकते हैं जो बदल गए हैं और तदनुसार कार्रवाई करते हैं।
हालाँकि, यदि आप कुछ करना चाहते हैं जब केवल एक विशेष एकल इनपुट में परिवर्तन होता है (और आप अन्य इनपुट के बारे में परवाह नहीं करते हैं), तो इनपुट संपत्ति सेटर का उपयोग करना सरल हो सकता है। हालांकि, यह दृष्टिकोण बदले हुए इनपुट के पिछले और वर्तमान मूल्यों की तुलना में बिल्ट इन प्रदान नहीं करता है (जिसे आप आसानी से ngOnChanges जीवन चक्र विधि के साथ कर सकते हैं)।
EDIT 2017-07-25: ANGULAR परिवर्तन की रिपोर्ट अब तक नहीं देखी गई है कि कुछ CIRCUMSTANCES
आम तौर पर, सेटर और एनकोऑन्गेज दोनों के लिए परिवर्तन का पता लगने पर आग लग जाएगी जब भी माता-पिता घटक बच्चे को दिए गए डेटा को बदलते हैं, बशर्ते कि डेटा एक जेएस आदिम डेटाटाइप (स्ट्रिंग, संख्या, बूलियन) हो । हालांकि, निम्नलिखित परिदृश्य में, यह आग नहीं करेगा और आपको इसे काम करने के लिए अतिरिक्त कार्रवाई करनी होगी।
यदि आप पेरेंट से चाइल्ड में डेटा पास करने के लिए नेस्टेड ऑब्जेक्ट या एरे (जेएस प्रिमिटिव डेटा टाइप के बजाय) का उपयोग कर रहे हैं, तो डिटेक्शन (सेटर या एनकेंगेज का उपयोग करके) आग नहीं लग सकती है, जैसा कि उपयोगकर्ता द्वारा उत्तर में भी उल्लेख किया गया है: म्यूटेरिच। समाधान के लिए यहां देखें ।
यदि आप कोणीय संदर्भ (अर्थात, बाह्य रूप से) के बाहर डेटा उत्परिवर्तन कर रहे हैं, तो कोणीय परिवर्तनों के बारे में पता नहीं होगा। बाहरी परिवर्तनों से कोणीय के बारे में जागरूक करने और इस प्रकार परिवर्तन का पता लगाने के लिए आपको अपने घटक में ChangeDetectorRef या NgZone का उपयोग करना पड़ सकता है। का संदर्भ लें इस ।