【发布时间】:2019-12-28 20:31:42
【问题描述】:
在此处使用 Angular 6 和反应形式。
我的页面上几乎没有带有提交和重置按钮的控件。所有控件都需要对其进行字段验证。 当用户单击提交按钮时,应选择所有控件。 单击重置按钮时,我想将所有控件重置为其初始状态。
下面是我的一个控件的html:
<div class="form-group" [formGroup]="userForm">
<label class="col-md-2 control-label">Environment</label>
<div class="col-md-4" [ngClass]="{ 'has-error': userForm.hasError('required', ['environment']) && isSubmitted}">
<select class="form-control input-large" formControlName="environment">
<option value=''>-- Select --</option>
<option [ngValue]="d.Id" *ngFor="let d of data">
{{d.Name}}
</option>
</select>
<div class="invalid-feedback">
<em *ngIf="userForm.hasError('required', ['environment']) && isSubmitted">*Required</em>
</div>
</div>
</div>
下面是我的控制器中的重置按钮点击:
resetClicked() {
this.createObjectForm.reset();
}
上面的代码可以工作,但问题是它还会再次触发所有验证,所以我的所有控件都变红了。
我搜索并尝试了以下代码:
Object.keys(this.createObjectForm.controls).forEach(key => {
this.userForm.get(key).clearValidators();
});
但是这个只有当我点击我的重置按钮两次时才有效。
我也尝试了以下代码,但结果相同:
this.userForm.markAsPristine();
this.userForm.markAsUntouched();
this.userForm.updateValueAndValidity();
谁能提供他们的意见。
【问题讨论】:
-
你能创建一个 stackblitz 演示吗.....或上传你的代码....因为重置表单应该只是将表单重置为未触及状态。
-
添加脏检查。 has-error 只有在控件有错误且脏的情况下才应该可见。如果您重置表单,希望它会再次原始
-
@j4rey 我已经添加了我的演示
-
this.myReactiveForm.reset(this.myReactiveForm.value); stackoverflow.com/a/43759912/9945674
标签: angular