【问题标题】:Angular: Multiple nested FormGroups in ComponentAngular:组件中的多个嵌套表单组
【发布时间】:2018-11-29 18:42:15
【问题描述】:

我正在尝试嵌套多个 FormGroup,如果我不想将模板外包给自己的组件,这会非常有效。

这是一个有效的例子

模板

<form [formGroup]="baseForm">
  <div formGroupName="nestedForm1">
    <div formGroupName="nestedForm2">
      <input formControlName="nestedControl">
    </div>
  </div>
</form>

打字稿

this.baseForm = this.formBuilder.group({
  nestedForm1: this.formBuilder.group({
    nestedForm2: this.formBuilder.group({
      nestedControl: ["Default Value"]
    })
  })
});

如果我尝试将“nestedForm1”和“nestedForm2”外包到一个单独的组件中,从第二级开始它就不再起作用了。

可以在以下链接中找到一个示例。在那里,您可以通过注释掉“app.component.html”中的相应代码部分来尝试两种方式

https://stackblitz.com/edit/angular-gnpw24?file=src%2Fapp%2Fapp.component.html

【问题讨论】:

    标签: angular typescript formgroups


    【解决方案1】:

    这是因为ControlContainer 提供者可以在以下任何指令上注册:

    模板驱动指令

    • NgForm
    • NgModelGroup,

    反应式指令

    • FormGroupDirective
    • 表单组名
    • FormArrayName

    但您希望它始终是FormGroupDirective,而在第二个组件中,父级ControlContainerFormGroupName

    我会使用通用的解决方案,无论父母类型是什么ControlContainer

    viewProviders: [{
      provide: ControlContainer,
      useFactory: (container: ControlContainer) => container,
      deps: [[new SkipSelf(), ControlContainer]],
    }]
    

    Forked Stackblitz

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-27
    • 1970-01-01
    • 2017-12-31
    • 2018-05-25
    • 2020-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多