【问题标题】:Angular - Reactive Forms - FormGroupName inside FormGroupNameAngular - 反应式表单 - FormGroupName 内的 FormGroupName
【发布时间】:2018-05-13 20:21:07
【问题描述】:

我有一个从 API 返回的嵌套 JSON 响应,其结构与我需要在模板上显示的方式不同,例如:

@Component({
  selector: 'reactive-form-example',
  styles: ['./reactive-form-example.component.css'],
  template: `
    <form [formGroup]="form" (ngSubmit)="onSubmit()">
        <div formGroupName="first">
            <input type="text" placeholder="some id" formControlName="someId">
            <div formGroupName="second">
                <input type="text" placeholder="some text" formControlName="someText">
            </div>
        </div>
    </form>
  `
})
export class ReactiveFormExampleComponent {
    form = new FormGroup({
        first: new FormGroup({
            someId: new FormControl('587824')
        }),
        second: new FormGroup({
            someText: new FormControl('the sky is blue')
        })
    });
    onSubmit(value) {
        console.log('Submit', this.form.value);
    }
}

问题:是否可以将 formGroupName 嵌套在另一个 formGroupName 中,或者是否有更好的方法可以使用响应式表单来实现相同的结果?

【问题讨论】:

  • 你可以试试[formGroup]="form.get('first')"而不是formGroupName="first"
  • @emostafa 有效!这是个好习惯吗?
  • 老实说,我不确定,但我认为是这样,在嵌套表单组下的角度文档中,您会找到有关它的部分。 angular.io/guide/reactive-forms#more-formcontrols

标签: angular angular-reactive-forms


【解决方案1】:

是的。 formGroupName 可以嵌套在另一个 formGroupName 中。

formGroupNameformControlName 属性通过在父级 FormGroup 中查找具有该特定名称的控件来工作。

请注意,您的问题是由于您试图在 first FormGroup 中查找名为 secondFormGroup 引起的:

<form [formGroup]="form">
    <div formGroupName="first">
        <div formGroupName="second">
        </div>
    </div>
</form>

要实现这一点,您必须按如下方式调整模型,其中 second 成为 first 的子代:

form = new FormGroup({
    first: new FormGroup({
        someId: new FormControl('587824'),
        second: new FormGroup({
            someText: new FormControl('the sky is blue')
        })
    }),        
});

emostafa 的建议之所以有效,是因为您要求form 实例在模型中获得一个名为second 的直接子代。在这种情况下确实存在。

【讨论】:

  • 是的,我知道这一点,但是 JSON 响应格式超出了我的控制范围,因此我正在寻找一种动态创建结构并能够在我需要的模板中使用的解决方案。因此,例如基本上递归遍历 JSON 响应,在每个嵌套级别创建一个 FormGroup,但问题是,如果您尝试绑定到另一个嵌套组,则模板将被监禁。
  • @JordanDavis 我建议提出另一个关注于此的问题。给出一两个返回的 JSON 格式示例,并询问如何最好地处理响应式表单中的这些格式。一些橡皮鸭问题:您是否关心在 HTML 中表示 JSON 结构?难道不能在 HTML 中以平面方式遍历所有问题吗? this 有用吗?
猜你喜欢
  • 2019-05-31
  • 1970-01-01
  • 1970-01-01
  • 2022-12-14
  • 2018-05-07
  • 2022-01-13
  • 2019-05-04
  • 2018-04-28
  • 2020-01-25
相关资源
最近更新 更多