我有一个反应性角形式的字段,我正在尝试向其添加验证。在我的服务类中,我可以使用Validators.required,默认情况下由angular提供,如下所示:
Countrycode: new FormControl('', [Validators.required, Validators.maxLength(12)])
但是条件是,如果国家/地区为加拿大,则此Validators.required应该起作用,否则不需要Validators.required。如果国家/地区不是加拿大,则如上所述,仅需要maxLength验证。我该怎么办?
答案 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();
}