我有一个表单,该表单的一部分显示和隐藏formGroup
当单击单选按钮时,验证器将附加到formGroup。
formGroup显示一个列表;单击列表中的项目时,它显示和隐藏由复选框组成的formArrays控件。
验证器检查包含已检查复选框状态(数量)的服务。
如果checkedAmount === 0,则会引发错误
执行此操作的原因是,如果我检查了实际的表单控件,就会发现一些属性(脏的,触摸的)在导航回页面时被重置(不是我的代码,而且我只能进行更改) )
当单击单选按钮以显示formGroup(项目列表)时,一切都很好,但是一旦单击列表中的项目,则formGroup无效
单击单选按钮并将验证程序附加到表单组时执行的功能
checkIfModificationsChecked(): void {
const form = this.formGroup.controls.otherForm;
if (form['controls'].radioButton1.value === 'Yes') {
form.validator = this.checkbox.requireCheckboxesToBeCheckedValidator(this.stateService);
this.form.get('vehiclePurchasedDate').setValidators([CustomValidator.dateRequired(['no-day'])]);
}
此函数获取已单击复选框的数量;如果没有返回附加到错误对象的对象
requireCheckboxesToBeCheckedValidator(stateService: StateService): ValidatorFn {
let isChecked = 0;
return function validate (formGroup: FormGroup): { [key: string]: boolean } | null {
Object.keys(formGroup.controls).forEach(key => {
const checkCount = stateService.getCheckedAmount(key);
if (checkCount > 0) {
isChecked = checkCount;
}
});
if ( isChecked === 0 ) {
// console.log(isChecked);
return {
'isNotChecked' : true
};
}
return null;
};
}