【问题标题】:Angular 6 Material form reset makes Validation error appear [duplicate]Angular 6 Material form reset使验证错误出现[重复]
【发布时间】:2019-04-05 15:09:42
【问题描述】:

当我第一次加载页面时,表单是这样的

但在我成功创建公告后,我使用this.announcementCreateForm.reset() 代码重置页面,并通过以下方式重置

我在ngOnInit()期间调用下面的方法buildAnnouncementForm()

 private buildAnnouncementForm() {
    this.announcementCreateForm = this.fb.group({
      announcementTitle: ['', [Validators.required]],
      announcementText: '',
      announcementFor: ['', [Validators.required]],
      announcementType: ['', [Validators.required]],
      announcementFromDate: [this.announcementFromDate, Validators.required],
      announcementToDate: [this.announcementToDate, Validators.required]
    });
  }

我在success之后调用reset方法

resetAnnouncementPage() {
    if (this.announcementCreateForm.valid) {
      console.log("Reset...");
      this.announcementCreateForm.reset();
      this.announcementCreateForm.markAsPristine();
      //this.announcementCreateForm.markAsUntouched();
    }
  }

我的重置,希望我在加载过程中将表单带入..怎么做?

【问题讨论】:

标签: angular angular6 angular-material-6


【解决方案1】:

如果您想将表单恢复为初始状态,则将该状态存储在一个值中,并在您想重置表单时使用它来设置表单值, 不要这样做form.reset(),它甚至会从 from 控件中删除空字符串。

initialFormValue = {
    announcementTitle: '',
    announcementText: '',
    announcementFor: '',
    announcementType: '',
    announcementFromDate: this.announcementFromDate,
    announcementToDate: this.announcementToDate
}

resetAnnouncementPage() {
    if (this.announcementCreateForm.valid) {
      console.log("Reset...");
      this.announcementCreateForm.setValue(this.initialFormValue);
      this.announcementCreateForm.markAsPristine();
    }
}

编辑

您还可以在执行reset() 表单时传递要重置的值。

private _initialValue

private buildAnnouncementForm() {

    this.announcementCreateForm = this.fb.group({
      announcementTitle: ['', [Validators.required]],
      announcementText: '',
      announcementFor: ['', [Validators.required]],
      announcementType: ['', [Validators.required]],
      announcementFromDate: [this.announcementFromDate, Validators.required],
      announcementToDate: [this.announcementToDate, Validators.required]
    });

    this._initialValue = this.announcementCreateForm.value

}

resetAnnouncementPage() {

    if (this.announcementCreateForm.valid) {
      this.announcementCreateForm.reset(this._initialValue);
    }

}

【讨论】:

    【解决方案2】:

    我按照这些步骤完成了它

    将 formDirective 添加到表单并将其传递给我的onSubmit 方法

     <form #formDirective="ngForm" (ngSubmit)="onSubmit(formDirective)" [formGroup]="announcementCreateForm">
    

    首先将formDirective 参数传递给我的reset 方法,然后将reset formDirective 传递给reset form

    resetAnnouncementPage(formDirective:FormGroupDirective) {
        if (this.announcementCreateForm.valid) {
          formDirective.resetForm();
          this.announcementCreateForm.reset();
        }
      }
    

    【讨论】:

    • 如果我能做你在这个答案中解释的事情,那就太好了。我试着实现你的想法。 stackblitz.com/edit/… 在这种情况下不起作用,我在这里错过了什么?
    • 我想您需要在表单中添加#formDirective="ngForm",然后将formDirective 传递给您的method
    猜你喜欢
    • 1970-01-01
    • 2018-02-20
    • 2021-04-15
    • 1970-01-01
    • 2019-04-08
    • 2015-09-19
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    相关资源
    最近更新 更多