2016-11-30 13 views
7

मैं एक विशिष्ट क्षेत्र पर एक सशर्त आवश्यक सत्यापन बनाने की कोशिश कर रहा हूं। मैं इसे वापस करने का प्रयास करता हूं Validators.Recquired मेरे फ़ंक्शन में वापस, लेकिन यह काम नहीं कर रहा है। मैं यह कार्य कैसे करूं? यहां मेरा कोड है:कोणीय 2: सशर्त आवश्यक सत्यापन

private _ansat: AbstractControl = new FormControl('', Validators.required); 
private _helbred: AbstractControl = new FormControl('', Validators.compose([this.useValidateIfRadio(this._ansat, 0, Validators.required)])); 


constructor(private _fb: FormBuilder) { 
    this.myForm = this._fb.group({ 
      ansat: this._ansat, 
      helbred: this._helbred 
     }); 
} 

useValidateIfRadio (c: AbstractControl, n: number, v) { 
     return function (control) { 
      return new Promise(resolve => { 
      // this.msg = ansatControl.value; 
      console.log(v); 
       if (c.value === n) { 

        resolve(v); 
       } 
       else { 
        resolve(null); 

       } 
      }); 
     }; 
    }; 

किसी भी मदद की बहुत सराहना की जाती है।

+0

आप इस समाधान हो गया? मैंने एक जवाब जोड़ा है, और अगर आप इसे एक ही तरीके से हल करते हैं (या यहां तक ​​कि एक बेहतर तरीके से) – Erex

+1

मैंने एक समान समस्या हल की है जैसा कि यहां दिखाया गया है: [सशर्त आवश्यक] (http: // stackoverflow। कॉम/प्रश्न/38204812/कोणीय 2-रूप-सत्यापनकर्ता-साथ-अंतःसंबंधित-फ़ील्ड/40416197 # 40416197) –

+0

आह, जो प्रतिभा दिखता है! मैं तब आपके समाधान का परीक्षण करूंगा! – Erex

उत्तर

20

मुझे एक ही समस्या थी लेकिन मुझे कोई जवाब नहीं मिला। चूंकि किसी ने इसका उत्तर नहीं दिया है, फिर भी मैं एक उदाहरण प्रदान करूंगा कि मैंने अपनी समस्या का समाधान कैसे किया, और आप उसी समाधान का उपयोग करके अपनी समस्या का समाधान कैसे कर सकते हैं।

उदाहरण: "_ansat" मेरा ईमेल श्रोता के बराबर है, और फिर आवश्यक जोड़ना (फोन नंबर ही अगर ईमेल सेट नहीं है की आवश्यकता होती है)

export class UserComponent implements OnInit { 

userForm: FormGroup; 

constructor(private fb: FormBuilder) {} 

ngOnInit() { 

    //Create my userForm and and add initial validators 
    this.userForm = this.fb.group({ 
     username: [null, [Validators.required]], 
     name: [null, [Validators.required]], 
     email: [], 
     phoneNumber: [null, [Validators.minLength(4)]], 
    }); 

    //Listen to email value and update validators of phoneNumber accordingly 
    this.userForm.get('email').valueChanges.subscribe(data => this.onEmailValueChanged(data)); 
} 


onEmailValueChanged(value: any){ 
    let phoneNumberControl = this.userForm.get('phoneNumber'); 

    // Using setValidators to add and remove validators. No better support for adding and removing validators to controller atm. 
    // See issue: https://github.com/angular/angular/issues/10567 
    if(!value){ 
     phoneNumberControl.setValidators([Validators.required, Validators.minLength(4)]); 
    }else { 
     phoneNumberControl.setValidators([Validators.minLength(4)]); 
    } 

    phoneNumberControl.updateValueAndValidity(); //Need to call this to trigger a update 
} 

} 

तो आपके मामले में आप एक changeListener जोड़ना चाहिए तदनुसार "_helbred" करने के लिए।

2

बस क्षेत्र के लिए सत्यापनकर्ता जोड़ें:

if(some_logic) { 
this.your_form.get('field_name').setValidators([Validators.required]); 
} 
संबंधित मुद्दे