验证程序无法识别使用patchValue()或setValue()设置的值

时间:2019-08-22 13:46:00

标签: typescript angular-reactive-forms angular8

我有一个利用反应形式的Angular 8应用程序。我有嵌套的formGroups,并且验证程序正常工作。从另一个页面,我传递了一个状态对象,其中包含一个“记录”,该记录用于预填充该页面上表单的字段。我正在遍历表单控件,并在这些控件上调用setValue(),这按预期工作。但是,在提交该预先填充的表单(我使用的按钮不是ng-submit)时,验证器看不到setValue()设置的值,并认为控件无效。

我尝试了所有.markAs方法和.updateValueAndValidity(),但没有一个起作用。我已经在单个控件,它们的组以及整个窗体上对其进行了尝试。

我已删除我的.markAs.updateValueAndValidity()通话:

populateSurvey(record): void {
    for (const i in this.surveyForm.controls) {
      if (record.hasOwnProperty(i)) {
        // this gets top level formControls
        const control = this.surveyForm.get(i);
        control.setValue(record[i]);
      } else {
        // this gets formGroup.controls of nested formControls
        const fGroup = this.surveyForm.controls[i] as FormGroup;
        const controls = fGroup.controls;
        for (const j in controls) {
          if (record.hasOwnProperty(j)) {
            const control = this.surveyForm.get(i + '.' + j);
            if (record[j] === 1) {
              control.setValue(record[j]);
            }
          }
        }
      }
    }
  }

这是我表单的截断版本:

this.surveyForm = this.formBuilder.group({
      eMail: [''],
      org: ['', Validators.required],
      site: ['', Validators.required],
      actId: ['', Validators.required],
      state: ['', Validators.required],
      county: ['', Validators.required],
      beachDescriptors: new FormGroup({
        bdDeep: new FormControl(),
        bdShallow: new FormControl(),
        bdOpen: new FormControl(),
        bdEmbayed: new FormControl(),
        bdFresh: new FormControl(),
        bdMarine: new FormControl(),
        bdPier: new FormControl(),
        bdDrain: new FormControl(),
        bdOther: new FormControl({ value: '', disabled: true }, Validators.minLength(1))
      }, this.groupValidator()),
        ...
});

预期的行为: 用户单击查询页面上的填充表单按钮,调查页面上的表单将填充record.values(有效)。 用户提交预填充的表单,验证器将验证包含预填充字段的页面(手动输入的值将按预期工作)。

0 个答案:

没有答案