2016-04-25 11 views
1

Angular2でコントロールグループ内のORステートメントでどのように組み合わせ検証を行うことができますか?たとえば、私は3つの入力フィールドを持っています。私は1つを必要とし、他の2つはORを必要とします。 [Input name] =必須、([Input email]または[Input phone])=必須です。Angular 2 combined form validation

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

});

答えて

2

groupメソッドには、カスタム検証関数を定義できる2番目のパラメータがあります。これは、検証規則が1つ以上の他のフィールドの状態に依存するシナリオで役立ちます。

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); 
     } 

    }; 

} 
関連する問題