在我通过单击按钮动态设置输入值后,Angular 的表单验证器似乎不会检查输入项是否有效。
在我的表单上,我有一个按钮,单击该按钮会调用 API 并使用返回的数据来填充某些字段。但是,我使用的方法不会调用 angulars 验证检查器。这可能是因为用户实际上并没有点击表单字段并手动设置数据......因此,验证器永远不会被激活。如果用户确实在该字段中键入了一些数据,则该表单将得到很好的验证。
我可以克服这个错误的最佳方法是什么?我是否采取了错误的方法来设置这些值?我希望验证表单,但用户不必单击并键入字段值。
我在 StackBlitz 上创建了我的表单的精简版。在这里查看
下面是相同的代码:
app.component.html:
<form [formGroup]="generalFormGroup">
<button type="button" (click)="populateData()">Populate default data</button>
<input type="text" placeholder="Title" formControlName="inputTitle" [value]="itemTitle" (input)="itemTitle = $event.target.value">
<button type="button" (click)="onSubmit()" [disabled]="generalFormGroup.invalid">Save</button>
</form>
app.component.ts:
import { Component, OnInit } from '@angular/core';
import { FormGroup, FormBuilder, Validators } from '@angular/forms';
@Component({
selector: 'my-app',
templateUrl: './app.component.html'
})
export class AppComponent implements OnInit {
generalFormGroup: FormGroup;
itemTitle = '';
constructor(private formBuilder: FormBuilder) { }
ngOnInit() {
this.initForm();
}
initForm() {
this.itemTitle = '';
this.generalFormGroup = this.formBuilder.group({
inputTitle: [this.itemTitle, Validators.required]
});
}
populateData() {
this.itemTitle = 'Some title here';
}
onSubmit() {
if (this.generalFormGroup.valid) { console.log('the form is valid'); }
else { console.log('the form is invalid'); }
}
}