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];
}
}
}