2016-04-25 27 views
1

Ich frage mich, wie ich eine kombinierte Validierung in Angular2 mit OR-Anweisungen in einer Kontrollgruppe machen kann. Zum Beispiel habe ich drei Eingabefelder und ich möchte 1 benötigt und die anderen beiden mit OR wie benötigt. [Name der Eingabe] = Erforderlich, ([E-Mail-Eingabe] ODER [Telefoneingabe]) = Erforderlich.Angular 2 kombinierte Form Validierung

this.userForm = this._formBuilder.group({ 
'name': ['', Validators.required], 
'email': ['', Validators.compose([Validators.required, ValidationService.emailValidator]), 
'phone': ['', Validators.required]] 

});

Antwort

2

Die Gruppenmethode verwendet einen zweiten Parameter, mit dem Sie eine benutzerdefinierte Validierungsfunktion definieren können. Dies ist nützlich in Szenarien, in denen die Validierungsregel vom Status eines oder mehrerer anderer Felder abhängt.

this.userForm = this._formBuilder.group({ 
'name': ['', Validators.required], 
'email': ['', Validators.compose([Validators.required, ValidationService.emailValidator]), 
'phone': ['', Validators.required] 

}, { validator: this.oneRequired('email', 'phone') }); 

oneRequired(first:string, second:string) { 
    return (group: ControlGroup) => { 
     var control1 = group.controls[first]; 
     var control2 = group.controls[second]; 
     var a = Validators.required(control1) || { required: false }; 
     var b = Validators.required(control2) || { required: false }; 
     if (a['required'] && b['required']) { 
      control1.setErrors({ oneRequired: true }); 
      control2.setErrors({ oneRequired: true }); 
     } 
     else { 
      control1.setErrors(null); 
      control2.setErrors(null); 
     } 

    }; 

}