在表单组上设置验证器

时间:2019-02-12 22:57:36

标签: angular

我有一个表单,该表单的一部分显示和隐藏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;

    };
  }

0 个答案:

没有答案