परिचय: यह विषय Stack Overflow पर क्यों छाया रहता है?
\n\nयदि आपने कभी Angular में लिखा है और <input> में परिवर्तनों को संभालने का सामना किया है, तो आपने निश्चित रूप से दो समान इवेंट देखे होंगे: (change) और (ngModelChange)। पहली नज़र में - ये एक ही हैं। व्यवहार में - शैतान विवरण में छिपा है। प्रश्न "(change) बनाम (ngModelChange) in Angular" Stack Overflow पर हज़ारों व्यूज़ इकट्ठा करता है, और यह व्यर्थ नहीं है: गलत चुनाव बग, सर्वर पर अनावश्यक अनुरोध और नींद हराम रातों की ओर ले जाता है।
इस लेख में PythonLib पर हम एक बार और हमेशा के लिए समझेंगे:
\n- \n
- Angular में
(change)और(ngModelChange)में क्या अंतर है? \n - प्रत्येक का उपयोग कब करें? \n
- सामान्य गलतियों से कैसे बचें? \n
चलिए शुरू करते हैं! 🚀
\n\nसंक्षेप में: (change) और (ngModelChange) क्या हैं?
\n\n(change) - यह एक मानक DOM-इवेंट है, जो तब ट्रिगर होता है जब कोई एलिमेंट फोकस खो देता है (blur) और उसका मान बदल गया हो। Angular बस नेटिव change को रैप करता है।
(ngModelChange) - यह ngModel डायरेक्टिव का इवेंट है। यह हर बार ट्रिगर होता है जब मॉडल बदलता है - वस्तुतः हर कीप्रेस पर (यदि ngModelOptions का उपयोग नहीं किया गया है)।
महत्वपूर्ण:\n\nngModelChangeका उपयोग[(ngModel)]के बिना नहीं किया जा सकता। यह द्वि-दिशात्मक बाइंडिंग का हिस्सा है।
अंतर देखने के लिए यहाँ TypeScript में एक न्यूनतम उदाहरण है:
\n\n// app.component.ts\nimport { Component } from '@angular/core';\n\n@Component({\n selector: 'app-root',\n template: `\n <input\n [ngModel]="name"\n (ngModelChange)="onNgModelChange($event)"\n (change)="onChange($event)"\n placeholder="नाम दर्ज करें">\n <p>मान: {{ name }}</p>\n `\n})\nexport class AppComponent {\n name = '';\n\n onNgModelChange(value: string) {\n console.log('ngModelChange:', value);\n }\n\n onChange(event: Event) {\n console.log('change:', (event.target as HTMLInputElement).value);\n }\n}\n\n\n"Angular" टाइप करने का प्रयास करें - और आप देखेंगे: ngModelChange 7 बार ट्रिगर होगा (प्रति अक्षर), जबकि change केवल एक बार, जब आप फ़ील्ड के बाहर क्लिक करेंगे।
मुख्य अंतर: तुलना तालिका
\n\nस्पष्टता के लिए, यहाँ (change) बनाम (ngModelChange) के प्रमुख अंतरों की तालिका है:
\n\n| मापदंड | \n(change) | \n(ngModelChange) | \n
|---|---|---|
| इवेंट का प्रकार | \nनेटिव DOM-इवेंट | \nAngular इवेंट (EventEmitter) | \n
| कब ट्रिगर होता है | \nफोकस खोने पर + मान में परिवर्तन | \nमॉडल में प्रत्येक परिवर्तन पर (प्रत्येक इनपुट) | \n
| $event में मान | \nEvent ऑब्जेक्ट (value निकालना आवश्यक) | \nमॉडल का नया मान (स्ट्रिंग, संख्या, आदि) | \n
| ngModel पर निर्भरता | \nआवश्यक नहीं (किसी भी input पर हो सकता है) | \n[(ngModel)] या [ngModel] की आवश्यकता है | \n
| प्रदर्शन | \nउच्च (शायद ही कभी ट्रिगर होता है) | \nबार-बार हो सकता है (प्रत्येक keypress पर) | \n
| फॉर्म के साथ उपयोग | \nरिएक्टिव फॉर्म, template-driven | \nकेवल template-driven फॉर्म | \n
(change) का उपयोग कब करें?
\n\n(change) - आपकी पसंद है, यदि:
\n- \n
- आपको केवल तब प्रतिक्रिया देनी है जब फ़ील्ड