角反应形式的验证

时间:2019-09-26 17:04:51

标签: angular angular6 angular7 angular8

我有一个反应性角形式的字段,我正在尝试向其添加验证。在我的服务类中,我可以使用Validators.required,默认情况下由angular提供,如下所示:

Countrycode: new FormControl('', [Validators.required, Validators.maxLength(12)])

但是条件是,如果国家/地区为加拿大,则此Validators.required应该起作用,否则不需要Validators.required。如果国家/地区不是加拿大,则如上所述,仅需要maxLength验证。我该怎么办?

2 个答案:

答案 0 :(得分:3)

除了Irwing的答案,您还可以使用以下方法订阅FormControl更改:

this.form.get('CountryCode').valueChanges.subscribe(val => {
    onChangeCountry(val);
});

但是,最好的做法是将自己的自定义验证功能作为控件的一部分,而不是倾听更改:

Countrycode: new FormControl('', [countryValidator, Validators.maxLength(12)])


export function countryValidator(control: AbstractControl) {
     if (otherValue == 'Canada' && !control.Value) {
        //validation fails
        return { invalid: true };
     }
     //validation passes
     return null;
  };
}

HTH

答案 1 :(得分:1)

您可以通过选择它来更新“国家验证器”,如以下代码所示:

onChangeCountry(country) {    
   if (country == "Canada") {
       this.form.controls.country.setValidators([Validators.required,Validators.maxLength(12)]);
   }else {    
       this.form.controls.country.setValidators([Validators.maxLength(12)]);


         } 
  this.form.controls.country.updateValueAndValidity();
}
相关问题