2016-09-20 9 views
8

समझने के लिए 'onlySelf' पैरामीटर करता है जब setValue को पारित करने की कोशिश कर रहा।कोणीय 2 - FormControl setValue 'onlySelf' पैरामीटर

this.form.get('name').setValue('', { onlySelf: true }) 

प्रलेखन कहते हैं: "अगर onlySelf सच है, यह परिवर्तन केवल इस FormControl के सत्यापन और नहीं अपनी मूल घटक गलत पर इस चूक को प्रभावित करेगा।।"

हालांकि मुझे यह समझ के लिए संघर्ष कर रहा हूँ। एंगुलर के मॉडल संचालित रूपों का उपयोग करने के लिए अभी भी काफी नया है।

उत्तर

13

Angular2 डिफ़ॉल्ट रूप से cascadingly शीर्ष स्तर जब भी किसी भी रूप तत्व मूल्य के लिए एक अद्यतन नहीं है, जब तक आप कोई कहने के लिए अप प्रपत्र नियंत्रण/फ़ॉर्म समूह वैधता की जांच करेगा। onlySelf ऐसा करने में आपकी सहायता करने के लिए टूल है।

आप एक loginForm एक username क्षेत्र और एक password क्षेत्र है कि कहो, उन दोनों के लिए आवश्यक हैं, इस तरह:

this.userNameControl = this.formBuilder.control('Harry', Validators.required); 
this.passwordControl = this.formBuilder.control('S3cReT', Validators.required); 
this.loginForm = this.formBuilder.group({ 
    userName: this.userNameControl, 
    password: this.passwordControl 
}); 

इस कोड के बाद, this.loginForm.validtrue है।

आप डिफ़ॉल्ट सेटिंग (onlySelf = false) का उपयोग कर एक नियंत्रण के मान सेट करते हैं, Angular2 नियंत्रण की मान्यता के साथ ही प्रपत्र समूह की वैधता अद्यतन करेगा। उदाहरण के लिए, इस:

this.passwordControl.setValue(''); 

this.passwordControl.valid === false 
this.loginForm.valid === false 

हालांकि में परिणाम होगा, इस:

this.passwordControl.setValue('', { onlySelf: true }); 

केवल बदल जाएगा passwordControl के केवल वैधता:

this.passwordControl.valid === false 
this.loginForm.valid === true 
2

रखें इस तरह, चलो कहते हैं कि आपके पास एक फॉर्म है, जिसे mainForm कहा जाता है जो मान्य है। इसमें चार नियंत्रण हैं और सभी चारों का मूल्य है। अब, आप अपने नियंत्रणों में से किसी एक के मान को अपडेट करने का निर्णय लेते हैं, मान लें कि आप इसे कुछ गलत मान पर अपडेट करते हैं और आप onlySelf: true निर्दिष्ट करते हैं। यदि आप this.mainForm.valid पर कॉल करने का प्रयास करते हैं, तो आपको परिणाम मिलेगा कि आपका फॉर्म मान्य है, भले ही आपका नियंत्रण मान्य मान्य नहीं है, और यह अमान्य स्थिति फ़ॉर्म को सबमिट करने की अनुमति नहीं देनी चाहिए। लेकिन क्योंकि फॉर्म वैध संपत्ति सही रिपोर्टिंग कर रही है, आप बैकएंड को असंगत मूल्य सबमिट कर देंगे।

यह भ्रामक हो सकता है कि आपको यह संपत्ति के लिए होता है, लेकिन वहाँ अवसर हो सकते हैं जब आप एक मूल्य या नियंत्रण की वजह से प्रपत्र रद्द करने के लिए नहीं करना चाहती। शायद आपके पास सर्वर पर कुछ उन्नत चेक हैं और आप सर्वर पर मान को सही करना चाहते हैं या आप उस समय उपलब्ध नहीं होने वाली कुछ बाहरी वेब सेवा के मूल्य पर निर्भर हो सकते हैं। मुझे यकीन है कि परिदृश्यों की संख्या है लेकिन यह मेरे सिर के ऊपर से कुछ है।

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