表单组验证器

问题描述

如何将验证器添加到包含表单控件的表单组。

我有这个。

users.forEach(e => {
  console.log(e);
  this.filasValidator.push(new FormGroup({
      dia: new FormControl('0')
  },[Validators.required,Validators.min(1)]
  ));
});
console.log(this.filasValidator.controls[0].invalid);

FilasValidator 是一个 FormArray

在模板html中我有这个

  <ng-template formArrayName="filas"
               #inputTemplate
               let-value="value"
               let-row="row"
               let-column="column"
               let-rowIndex="rowIndex">
    <label [formGroupName]="rowIndex" class="pya-cell">
      <small class="text-muted d-block d-lg-none">{{ column.name }}</small>
      <!--REVISAR VALUE,DA ERROR DE REASIGNACION -->
      <input
        (input)="editHour(rowIndex,column.prop,$event)"
        formControlName="dia"
        [ngClass]="{'is-invalid': filasValidator.controls[rowIndex].invalid}"
        type="number"
        value="{{ value }}"
        class="number text-center w-50 form-control light"
      />
    </label>
  </ng-template>

很难解释,但看我有一张表,其中一周有几天,到那些日子我必须放一个表单控件,但如果至少有1条记录大于0,则该行必须有效. 这就是为什么我需要在表单控件之外进行验证

我试过了

  this.filasValidator.push(new FormGroup({
      lunes: new FormControl('0',Validators.min(1)),martes: new FormControl('0',miercoles: new FormControl('0',jueves: new FormControl('0',viernes: new FormControl('0',Validators.min(1))
  },[Validators.required]
  ));

但我需要 FormControls 之外的 Validators.min。

解决方法

编辑:

我做了这个改变,制作了一个自定义验证器并放入 FormGroup 来验证所有字段

Stackblitz

export class OpponentDetailsComponent implements OnInit {
      objFormGroup = this.formBuilder.group(
        {
          test: [null],test2: [null]
        },{ validators: [this.validatorArray()] }
      );

      constructor(private formBuilder: FormBuilder) {}

      ngOnInit(): void {}

     validatorArray(): ValidatorFn {
        return (group: FormGroup) => {
          for (let key of Object.keys(group.controls)) {
           if (group.controls[key].value > 0) return null;
        }

        return { min: 1 }
      };
   }
}

原答案:

您可以像在 FormControl 中一样将验证器放入 FormGroup 中,如下所示:

new FormGroup({dia: new FormControl('0')},[Validators.required])

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...