2016-12-06 66 views
4

我正在使用ReactiveFormsModule来构建表单。反应形式至少需要一个值

我需要用户输入联系方式:

  • 家里的电话号码
  • 手机号码
  • 电子邮件

的形式应该是有效的,如果有一个家庭电话或手机输入号码,即至少需要一个。邮件是可选的。

this.contact = this.fb.group({ 
    'Festnetz': [], 
    'Mobil': [], 
    'Email': [], 
}); 

this.contact.valueChanges.subscribe(form => { 
    console.log(form, this.contact.status); 
}); 

如何声明使用FormBuilder

回答

3

你可以做这样的事情:

 this.contact = this.fb.group({ 
     'Festnetz': [], 
     'Mobil': [], 
     'Email': [], 
    },{validator:(formGroup:FormGroup)=>{ 
return this.validatePhone(formgroup); 

    }); 

validatePhone(formgroup:FormGroup){ 
    if(formgroup.controls["Festnetz"].value || formgroup.controls["phone"].value){ 
      return {validatePhone:true}; 
      } 
      else{ 
      return null; 
      } 
    } 

或者您可以为您的手机号码建立一个小组:

this.contact = this.fb.group({ 
    'phoneGroup':this.fb.group({ 
     'Festnetz': [], 
      'Mobil': [] 
    },{validator:(formgroup:FormGroup)=>{ 
     return this.validatePhone(formGroup); 

     }), 
      'Email': [], 
     }); 

validatePhone(formgroup:FormGroup){ 
if(formgroup.controls["Festnetz"].value || formgroup.controls["phone"].value){ 
     return {validatePhone:true}; 
     } 
     else{ 
     return null; 
     } 
} 

注:我假设“Festnetz”是手机的一个号码