Angular 启动p-autoComplete组件的表单验证不工作

Angular 启动p-autoComplete组件的表单验证不工作,angular,primeng,Angular,Primeng,我有一个包含几个元素的表单。在这个表单中,我有两个启动p-autoComplete组件。出于某种原因,我的反应式表单验证不会在这些组件上检测到,而是在表单的所有其他组件上检测到 html: 我只包含了验证不起作用的p-autoComplete组件的表单代码。对于所有其他组件,验证使用formErrors和validationMessages数组进行。我尝试过的另一件事是让我的ts实现DoCheck,然后使用ngDoCheck方法,该方法只调用validateForm()函数,因为根据primen

我有一个包含几个元素的表单。在这个表单中,我有两个
启动p-autoComplete
组件。出于某种原因,我的反应式表单验证不会在这些组件上检测到,而是在表单的所有其他组件上检测到

html:


我只包含了验证不起作用的
p-autoComplete
组件的表单代码。对于所有其他组件,验证使用
formErrors
validationMessages
数组进行。我尝试过的另一件事是让我的ts实现
DoCheck
,然后使用
ngDoCheck
方法,该方法只调用
validateForm()
函数,因为根据primeng,“AutoComplete要么使用基于setter的检查,要么使用ngDoCheck来实现建议是否已更改以更新UI”。每当我更改
p-autoComplete
组件的值,但仍然没有进行验证时,就会调用此函数。

您找到验证的解决方案了吗?
<form [formGroup]="formGroup" (submit)="onSubmit()">
    <div class="ui-g">
  <div class="ui-g-6">
    <label>Generator Name</label>
    <div class="ui-inputgroup">
      <p-autoComplete name="name" formControlName="gen" [suggestions]="hint"
                      (completeMethod)="filter($event)"  field="name"
                      [forceSelection]="true" [dropdown]="true" placeholder="Select"></p-autoComplete>
      <div *ngIf="formErrors['gen']">
        {{formErrors['generator']}}
      </div>
    </div>
  </div>
</div>
</form>
hint: Gen[];

ngOnInit() {
    this.createForm();
    this.initVariable();
  }

initVariable() {
    this.formErrors = {
      'gen': '',
    };

    this.validationMessages = {
      'gen': {
        'required': 'Gen is required'
      }
    };

  }

createForm() {
    this.formGroup = this.fb.group({
      gen: [null, Validators.required]
    });

    this.formGroup.valueChanges.subscribe(() => this.onValueChanged());
    this.onValueChanged();
  }

onValueChanged() {
    if (this.formGroup === null || this.formGroup === undefined) {
      return;
    }
    validateForm(this.formGroup, this.formErrors, this.validationMessages);
  }

validateForm(form: FormGroup, formErrors, validationMessages) {
  for (const field in formErrors) {
    if (formErrors.hasOwnProperty(field)) {
      formErrors[field] = '';
      const control = form.get(field);

      if (control && control.dirty && !control.valid) {
        const error = lookupError(control, validationMessages[field]);
        setErrorIfExists(formErrors, field, error);
      }
    }
  }
}

function lookupError (control, messages) {
  for (const key in control.errors) {
    if (control.errors.hasOwnProperty(key)) {
      return messages[key];
    }
  }
}