使用mat-select作为唯一必填字段的每个formGroup不能通过FormGroup.reset()进行重置,因为验证器不会重置
提交时,第一个字段为空并标记为错误...
对我来说唯一有效的解决方案是使用ngIf来重新生成表单,但对于看到空html几秒钟的用户而言,这并不是一个很好的选择。
还有其他解决方案吗?
谢谢!
答案 0 :(得分:2)
由于已经有了一个可以接受的答案,所以我可以在这里建议增加一些内容。
这是Material
的一个鲜为人知的错误,作为一种解决方法,您可以将ElementReference
添加到form
标签#f="ngForm"
中:
<form [formGroup]="quickFileForm" (ngSubmit)="saveQuickFileForm()" #f="ngForm">
然后在您的TS部分添加一个@ViewChild
装饰器,该装饰器引用表单中的标记:
import { Component, ViewChild } from '@angular/core';
import { FormGroup, FormControl, Validators } from '@angular/forms';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent {
group = new FormGroup({
select: new FormControl(null, Validators.required),
input: new FormControl()
});
@ViewChild('f') myForm;
....
....
}
不要忘记从@angular/core
上方导入它。然后只需添加:
this.myForm.resetForm();
使用您的方法:
submit() {
if(this.group.valid) {
const obj = new MyObj();
Object.assign(obj, this.group.value);
this.survey.push(obj);
this.myForm.resetForm(); // <-- Here you add it.
return;
}
alert('not valid, try again')
}
答案 1 :(得分:0)
使用SetValidators将验证器设置为nullvalidator
this.group.controls['select'].setValidators([Validators.nullValidator])
this.group.controls['select'].updateValueAndValidity();