2016-02-20 32 views
22

में कस्टम Async Validator को कैसे कार्यान्वित करें 1. क्या यह अभी तक कोणीय द्वारा समर्थित है? this खुला मुद्दाकोणीय 2/4/5

2. देख अगर ऐसा है, तो क्या नीचे

export class someClass{ 

    myForm:ControlGroup; 

    constructor(public http:Http, public formBuilder:FormBuilder) 
     this.myForm = formBuilder.group({ 
      ImageId: ["", Validators.required, this.asynValidator] 
    }); 

    asyncValidator(control: Control): {[key: string]: any} { 

     return new Promise (resolve => { 

      let headers = new Headers(); 
      headers.append('Content-Type', 'application/json'); 

      this.http.get('http://localhost/ImageIdValidate?id='+ control.value, {headers:headers}) 
       .map(res => res.json()) 
       .subscribe(data => { 
        console.log(data); 
        if(data != null) { 
         resolve({"duplicate": true}) 
        } 
        else resolve(null);  
       }) 
      }); 
     }); 
     } 
    } 

कोड में गलत है यह भी एक सर्वर अनुरोध नहीं है।

उत्तर

26

आप नीचे बताए गए तरीके घटक उदाहरण पर ही अपने विधि बाध्य करने के लिए की जरूरत है:

this.myForm = formBuilder.group({ 
      ImageId: ["",  
       Validators.required, 
       this.asynValidator.bind(this)] 
    }); 

नहीं तो आप अपने अनुरोध को निष्पादित करने http संपत्ति का उपयोग करने में सक्षम नहीं होगा।

यह लेख भी आप अतुल्यकालिक फ़ॉर्म सत्यापन के बारे में कुछ संकेत (अनुभाग "अतुल्यकालिक सत्यापन" देखें) दे सकता है: समाधान के लिए

+7

असल में, जावास्क्रिप्ट काम करता है। जब आप किसी विधि का संदर्भ देते हैं तो आप जिस वस्तु को संलग्न करते हैं उसे खो देते हैं। आप बाइंड विधि का उपयोग करके इसे मजबूर कर सकते हैं ... –

+1

जब मुझे लगता है कि मैं किसी दिन प्रो होने के लिए अपने रास्ते पर हूं, तो इस तरह की चीजें मुझे हंसती हैं। लेकिन वैसे भी, [यह सवाल] है (http://stackoverflow.com/questions/20279484/how-to-access-the-correct-this-context-inside-a-callback) संबंधित? –

+1

वास्तव में जावास्क्रिप्ट में ओओपी जावा और सी ++ जैसी भाषाओं के अलग-अलग सामने है। कक्षा के कीवर्ड के साथ, आप वास्तव में भाषाओं के साथ "सत्य" कक्षाओं को परिभाषित नहीं करते हैं। जावास्क्रिप्ट usés प्रोटोटाइप आधारित ओओपी। हां आपके द्वारा उद्धृत प्रश्न इस समस्या से संबंधित है। –

-1

हैलो लोग धन्यवाद। हालांकि यह मेरे लिए बॉक्स से बाहर काम नहीं करता था।

समस्या यह थी कि एसिंक सत्यापनकर्ता को वैधकर्ताओं के हिस्से के रूप में अगला पैरामीटर होना था। तो मेरे लिए क्या काम किया गया

this.myForm = formBuilder.group({ 
     ImageId: ["",  
      [Validators.required], 
      [this.asynValidator.bind(this)]] 
}); 

और tadaa !! सिरदर्द चला गया था। उम्मीद है कि यह किसी की मदद करेगा।

+0

एकमात्र अंतर मैं देख सकता हूं कि आपने उत्तर पोस्ट की तुलना में कुछ अतिरिक्त [] जोड़ा है। और आपने उल्लेख नहीं किया है कि अतिरिक्त [] आवश्यकता क्यों है। यह सहायक सहायक नहीं है – MJK

0
कोणीय के नए संस्करण के रूप में

, लेकिन पूर्व संस्करण 5.0.0 आप अपने formcontrol के लिए तीसरा तर्क के रूप में async सत्यापनकर्ता जोड़ना होगा:

myControl: ['', [Validators.required], [this.asyncValidator.bind(this)]] 

संस्करण 5.0.0 जब से तुम अब तो जैसे प्रमाणकों चिह्नित कर सकते हैं:

myControl: ['', {validators: [Validators.required], 
       asyncValidators:[this.asyncValidator.bind(this)]}]