gpt4 book ai didi

Angular 10 : Dynamically add input element for nested FormArray inside FormBuilder

转载 作者:行者123 更新时间:2023-12-03 19:04:27 26 4
gpt4 key购买 nike

这是我的StackBlitz Demo App的链接
我正在尝试使用 FormBuilder array() 方法动态添加输入字段。
要获得清晰的视野,请查看我的 ngOnInit()和依赖方法

stackForm: FormGroup;

get work(): FormArray {
return this.stackForm.get('work') as FormArray;
}

get highlights(): FormArray {
return this.stackForm.get('work.highlights') as FormArray;
}

ngOnInit() {
this.stackForm = new FormGroup({
'work': this.fb.array([this.buildWork()])
})
}

buildWork(): FormGroup {
return this.fb.group({
company: '',
position: '',
summary: '',
highlights: this.fb.array([this.buildHighlights()])
});
}

buildHighlights(): FormControl {
return new FormControl()
}
HTML实现是这样的:
<div formArrayName="highlights">
<div [formGroupName]="j"
*ngFor="let hg of highlights.controls; let j=index">
<!-- input element -->
</div>
</div>
但是我在控制台上收到此错误消息,并且未显示我的输入字段。

ERROR Error: ctx_r0.highlights is null


更新:感谢@Lotte-Lemmens,帮助我找出了 null问题。
但是,我在加载时看不到文本框。也许因为它是空的,我如何从组件传递一个空值,以便它循环一次,我也可以看到文本框。
更新:感谢@Eldar,我现在可以看到文本框,并为新亮点添加更多内容。在更新的 StackBlitz 上,更新 stackForm 的值仍然存在问题添加高光时。当我单击新高亮并添加新高亮时,该值未添加到 highlightsstackForm.value 中的数组,仅添加第一个值。
但是,如果我编辑第一个亮点(要重新创建此问题,请先添加多个亮点),所有其他亮点都会立即添加到数组中。
谢谢。

最佳答案

好吧,您需要解决一些问题:

  • 联系 FormArray
  •  <div [formGroupName]="j" *ngFor="let hg of highlights(i); let j=index">
    由于您正在访问表单数组(工作是 FormArray),因此您需要访问正确的表单数组项。为此,您需要使用上述索引。
  • 要实现目标 1。您需要更改您的 highlights属性转换为接受索引的函数:
  • highlights(i :number): Array<FormControl> {
    let c =((this.stackForm.get('work') as FormArray).controls[i].get('highlights') as FormArray).controls as Array<FormControl>;
    return c;
    }
  • 最后可以直接绑定(bind)formControl而是使用 formControlName
  • <input class="form-control"
    id="{{'highlightsId' + j}}"
    type="text"
    placeholder="Highlights"
    [formControl]="hg">
    编辑:
    要添加新的亮点,您需要更改方法,如下所示:
     addHighlights(i = 0): void {
    this.highLightFormArray(i).push(this.buildHighlights());
    }
    StackBlitz

    关于 Angular 10 : Dynamically add input element for nested FormArray inside FormBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64022795/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com