我试图在一个组件中创建多个表单.我试着用mat-tab-groups美元来实现这一点

<mat-tab-group>
  <mat-tab label="form1">
    <form>...</form>
  </mat-tab>
  <mat-tab label="form2">
    <form>...</form>
  </mat-tab>
</mat-tab-group>

我在ts中创建表单的功能如下:

createForm1(){
  this.form = this.formBuilder.group({
    field1: [''],
    field2: [''],
    ...
  })
}
createForm2(){
  this.form = this.formBuilder.group({
    field1: [''],
    field2: [''],
    ...
  })
}

我在构造函数中调用了此函数:

constructor(some dependencies){
  this.createForm1;
  this.createForm2;
}

但是,当调用createForm2()时,它会崩溃.如果我改变顺序,form2将被创建,form1将崩溃.误差是ERROR Error: Cannot find control with name: someField.

我猜这个错误与选项卡有关(只能创建活动选项卡的形式),但我不知道如何解决它.

Further Info

在html中,可通过以下方式访问控件:

<div class="form-group"><input type="number" formControlName="field1" class="form-control"/></div>
<div class="form-group"><input type="number" formControlName="field2" class="form-control"/></div>

推荐答案

我想你错过了几件事.

我用上面给出的细节创建了一个stackblitz,它们很有效.

您还应该给<form>[formGroup]以告诉它绑定到相关的表单组.

 <form [formGroup]="form1">
      <div class="form-group">
        <input type="number" formControlName="field1" class="form-control" />
      </div>
      <div class="form-group">
        <input type="number" formControlName="field2" class="form-control" />
      </div>
    </form>
  </mat-tab>
  <mat-tab label="form2">
    <form [formGroup]="form2">
      <div class="form-group">
        <input type="number" formControlName="field1" class="form-control" />
      </div>
      <div class="form-group">
        <input type="number" formControlName="field2" class="form-control" />
      </div>
    </form>

.ts组件中,您正在初始化同一组件两次:

createForm1(){
  this.form = this.formBuilder.group({
    field1: [''],
    field2: [''],
    ...
  })
}
createForm2(){
  this.form = this.formBuilder.group({
    field1: [''],
    field2: [''],
    ...
  })
}

你应该有两个不同的formGroups,即form1和form2,如下所示:

 createForm1() {
    this.form1 = this.formBuilder.group({
      field1: [''],
      field2: [''],
    });
  }
  createForm2() {
    this.form2 = this.formBuilder.group({
      field1: [''],
      field2: [''],
    });
  }

最后在构造函数中调用它们,如下所示:

 constructor(private formBuilder: FormBuilder) {
    this.createForm1();
    this.createForm2();
  }

Angular相关问答推荐

Angular - Bootstrap 5 Carbon不工作

使用多个管道时Angel 17空数据

如何取消针叶林输入的自动填充?

iOS Mobile Safari - HTML5视频覆盖一切

Angular 动画—淡出适用于DIV,不完全适用于子组件

Angular 16未知参数:独立

带有两个注入服务的函数式解析器(Angular 15)

确保我的角库S服务构建提供独立的友好提供功能

倒计时计时器,每10秒重新启动一次,共4次

无法创建新的 Ionic 项目

Angular 迁移 14 到 15 / 16:angular universal 是否停止将 <!-- this page was prerendered with angular universal --> 用于预渲染页面?

从 Angular 应用程序中删除散列标签后无法从 Apache 访问 API

Angular:为什么在 ngAfterContentInit 之后变量未定义?

如何在对话框angular material内对齐按钮?

如何在 Angular Cli 中生成 .angular-cli.json 文件?

如何在Angular 4中为数字管道指定语言环境千位分隔符

Angular 5 手动导入语言环境

如何在 Angular2 中的所有请求的请求标头中发送Cookie?

NPM 脚本 start退出,但未指示 Angular CLI 正在侦听请求

Angular 2 中的动态模板 URL