在一个组件中创建多个表单

Create many forms in one component

我正在尝试在一个组件中创建多个表单。我试图用 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.

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

更多信息

在 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,它们起作用了。 https://stackblitz.com/edit/angular-4y6edt

您还应该给 <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();
  }