我创建了一个由JSON数组组成的表单,据此,我生成了Validation,formControlName并通过formGroup生成输出。
this.ELEMENT_DATA_UPDATE = [ { …
补充我的评论,注意:你需要添加验证器(我在你的代码中看不到它们)
this.updateForm=new FormGroup({}) //<--create the formGroup for(let formModule of this.keyArray){ this.updateForm.addcontrol(formModule.key,new FormControl(formModule.Value)) }
而且,如果我们在keyArray中的对象是这样的
{ "key" : "key_name" , "value" : "value" , "name" : "Key name" , validators:[Validators.required, Validators.email] }
我们可以改善循环
for(let formModule of this.keyArray){ this.updateForm.addcontrol(formModule.key, new FormControl(formModule.Value,formModule.validators)) }
好吧,如果我们的对象很难从我所展示的服务变得困难,但我们的服务可能会为我们提供如下对象:
{ "key" : "key_name" , "value" : "value" , "name" : "Key name" , validators:[{type:"required"},{type="min",args:3}] }
在进行循环之前我们可以使用
this.keyArray.forEach(x=> { if (x.validators) { conts validators=[]; validators.forEach(v=>{ switch (v.type) { case "required": validators.push(Validators.required); break; case "min": validators.push(Validators.min(v.arg); break; ... } }) x.validators=validators; } }
要显示错误,我们必须考虑表单中的控件
updateForm.get(keyArray.key)
所以,例如
<div class="col-lg-6" *ngFor="let keyArray of keyArray"> <mat-form-field> <input type="text" [formControlName]="keyArray.key" matInput [placeholder]="keyArray.name" [ngClass]="{ 'is-invalid': submitted && updateForm.get(keyArray.key).errors }" autocomplete="off" /> <mat-error *ngIf="submitted && updateForm.get(keyArray.key).hasError('required')"> {{keyArray.name}} is <strong>required</strong> </mat-error> </mat-form-field> </div>