gpt4 book ai didi

angular - 使用带有嵌套 ngfor 的模板

转载 作者:搜寻专家 更新时间:2023-10-30 21:40:00 24 4
gpt4 key购买 nike

使用 Angular4 ReactiveForm(我正在使用的版本)创建一个表单。哪里有表格,其中有代码、年份和类别列表。

主窗体:

  • 代码
  • 年份
  • 类别[]
    • 代码
    • 说明
    • 订单
    • 产品[]
      • 代码
      • 说明
      • 价格

但我试图以下列方式显示表单,其中类别列表和每个类别中的产品将是所有行,并且将全部显示在同一个表格中(示例):

<input code>
<input year>
<table>
<tr>Category 1</tr>
<tr>Product 1.1</tr>
<tr>Product 1.2</tr>
<tr>Product 1.3</tr>
<tr>Category 2</tr>
<tr>Product 2.1</tr>
<tr>Product 2.2</tr>
</table>
<button addNewCategory />
<button addNewProduct />

我能够将类别显示为行,但我无法将每个类别中的产品显示为类别行下方的一行:

我的 typescript 表格:

ngOnInit() {
this.form = this._fb.group({
code: ['', Validators.required],
year: ['', Validators.required],
categories: this._fb.array([this.initCategory()])
});
}

initCategory() {
return this._fb.group({
code: ['', Validators.required],
desc: ['', Validators.required],
order: ['', Validators.required],
products: this._fb.array([this.initProduct()])
});
}

initProduct() {
return this._fb.group({
code: ['', Validators.required],
desc: ['', Validators.required],
price: ['', Validators.required]
});
}

搜索,我被告知要使用ngfor模板,但我不能使用它们,当我尝试使用它们时,模板标签内的内容不显示。

如果我使用 div,我可以在每个类别下方显示产品。但它在表格内效果不佳。

我的模板:

<div>
<form [formGroup]="form">
<input type="text" formControlName="code" />
<input type="text" formControlName="year" />
<table>
<div formArrayName="categories">
<template *ngFor="let category of form.controls['categories'].controls; let i=index">
<tr>
<td><input type="text" formControlName="code" /></td>
<td><input type="text" formControlName="desc" /></td>
<td><input type="text" formControlName="order" /></td>
</tr>
<div="products">
<template *ngFor="let product of category.controls['products'].controls; let j=index">
<tr>
<td><input type="text" formControlName="code" /></td>
<td><input type="text" formControlName="desc" /></td>
<td><input type="text" formControlName="price" /></td>
</tr>
</template>
</div>
</template>
</div>
</table>
</form>
</div>

最佳答案

首先,您应该使用 ng-template,因为 template 在 v4 中已被弃用。

如果您查看浏览器的控制台,您可能会看到如下错误:

ERROR Error: Cannot find control with path: 'ARRAY_NAME -> FORM_CONTROL_NAME'

要修复它,您必须用 formGroupName 包裹 category:

<tr [formGroupName]='i'>
...
</tr>

对于产品:

<div="products" formArrayName="products">
...
<tr [formGroupName]='j'>
...
</tr>
...
</div>

如果您的 component 文件中的所有内容都正确,它应该可以工作。

关于angular - 使用带有嵌套 ngfor 的模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43646779/

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