angular - 所需的垫选择无法重置

标签 angular angular-material

每个使用 mat-select 作为唯一必填字段的 formGroup 不能使用 FormGroup.reset() 重置,因为验证器不会重置

https://stackblitz.com/edit/material7-template-matselect-required?file=src%2Fapp%2Fapp.component.html

提交时,第一个字段为空并标记为错误...

唯一对我有用的解决方案是使用 ngIf 重新生成表单,但对于看到空 html 的用户来说并不是很好......

还有其他解决方案吗?

谢谢!

最佳答案

由于已经有一个被接受的答案,我可以建议在那里添加较少的行。

这是 Material 的一个众所周知的错误,作为解决方法,您可以将 ElementReference 添加到您的 form 标记 #f="ngForm":

<form [formGroup]="quickFileForm" (ngSubmit)="saveQuickFileForm()" #f="ngForm">

然后将 @ViewChild 装饰器添加到引用表单中标记的 TS 部分:

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')
  }

关于angular - 所需的垫选择无法重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53522364/

相关文章:

javascript - Angular:将方法作为参数传递

angular - 空注入(inject)器错误: No provider for MatBottomSheet

javascript - Angular 形 Material - 从底部开始的侧导航?

html - 如何调整垫子选择高度以适合其元素?

javascript - 使用 JavaScript 映射和缩减 JSON 对象

Angular 在循环中多次调用相同的 API

angular - NativeScript-Angular - KeyboardEvent 未定义

angular - 有没有办法根据日期过滤 Material 表

angularjs - 将对象属性拆分为两列

鉴于字体已经加载, Angular Material 垫图标不起作用