修改此方法,使其应用​​于表单组中除最后一项之外的所有项。 Angular 7 反应形式。没有 jquery 或 ngModel

Modify this method so that it is applied to all items except the last item in a form group. Angular 7 reactive form. No jquery or ngModel

我有一种方法可以根据表单组中的项目值应用验证。此方法适用于表单组中的所有项目。我需要将表单组中的最后一项从该方法中排除,但不知道如何修改它。

在我的 TS 文件中

 ngOnInit() {
   this.initForm();
 }

 initForm() {
  this.sectionSix = this.formBuilder.group({
    medicaidOrSssi: [''],
    snap: [''],
    freeOrReducedPriceLunch: [''],
    tanf: [''],
    wic: [''],
    noneOfTheAbove: [''],
    dislocatedWorker: [''],
  }, { validator: this.selectAtleastOne });

 }

我要改的方法就是这个

selectAtleastOne(c: FormGroup) {
  const selectAtleastOne = Object.values(c.value).some(Boolean);
  return selectAtleastOne ? null : {
    selectAtleastOne: {
    requiredTrue: true,
    valid: false,
    error: true
    }
  };
}

表单组中的前 6 项是复选框,最后一项是下拉列表。最后一个问题不能移到另一个表格组,它需要留在这个表格组中。

问题是,至少需要 select 选中一个复选框。如果 none 是 selected,则会弹出验证消息。它现在的行为方式是,如果我没有 select 任何复选框,并且 select 下拉列表中的值(表单组中的最后一项),它认为复选框有效,即使它们都是空白。

您可以省略 c.value 中的下拉字段,然后检查布尔值。我认为这会起作用。

试试这个。

selectAtleastOne(c: FormGroup) {
  const { ['dislocatedWorker']: dd, ...allCheckboxes } = c.value;
  const selectAtleastOne = Object.values(allCheckboxes).some(Boolean);
  return selectAtleastOne ? null : {
    selectAtleastOne: {
    requiredTrue: true,
    valid: false,
    error: true
    }
  };
}