使用自定義驗證器和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();
}
});
現在你的校驗都在一個一致的地方規定,你仍然可以控制是否驗證器是否執行。