使用自定义验证器和setValidators
可能会非常迅速地变得非常复杂。我更愿意配置验证器,因为它们可能是必需的,然后有条件地启用或禁用它们。
究竟使用代码:
this.contractsFilter = this.fb.group({
selectedContractType: ['', [Validators.required]],
selectedYear: ['', [Validators.required]],
selectedPde: ['', [Validators.required]],
refNo: ['', []]
});
然后,我会订阅valueChanges
为refNo
:
this.contractsFilter.controls['refNo'].valueChanges.subscribe(value => {
if (value) { // There is a refNo specified
this.contractsFilter.controls['selectedContractType'].disable();
this.contractsFilter.controls['selectedYear'].disable();
this.contractsFilter.controls['selectedPde'].disable();
} else {
this.contractsFilter.controls['selectedContractType'].enable();
this.contractsFilter.controls['selectedYear'].enable();
this.contractsFilter.controls['selectedPde'].enable();
}
});
现在你的校验都在一个一致的地方规定,你仍然可以控制是否验证器是否执行。