我在名为companies
的组件中有一个属性:
companies: Company[];
每家公司都有products
的列表:
export class Company {
id: number; //my own class
name: string;
products: Product[] = []; //company have products
//Product is a diffrent object like Company
}
但是当我检索数据(company
和products
)时,products
列表没有类型(Product
现在是Object
)。
在组件的模板中,我想创建一个嵌套的*ngFor
,如下所示:
<mat-expansion-panel>
<mat-expansion-panel-header
*ngFor="let company of companies"
>
<mat-panel-title>{{ company.name }}</mat-panel-title>
</mat-expansion-panel-header>
<mat-selection-list>
<mat-list-item *ngFor="let product of companies.products">
{{ product.name }}
</mat-list-item>
</mat-selection-list>
</mat-expansion-panel>
但是,控制台出现错误:
错误TypeError:无法读取未定义的属性“产品”
公司列表显示正常,但公司中没有相关产品。
我的问题是,如何正确编码*ngFor
才能在组件模板中获取那些(与公司相关的)产品?
答案 0 :(得分:2)
您需要嵌套*ngFor
。 companies
是一个数组,没有products
属性,但是company
有。并且请注意,我将第一个*ngFor
从面板标题标签移到了面板标签。
<mat-expansion-panel *ngFor="let company of companies">
<mat-expansion-panel-header>
<mat-panel-title>{{ company.name }}</mat-panel-title>
</mat-expansion-panel-header>
<mat-selection-list>
<mat-list-item *ngFor="let product of company.products">
{{ product.name }}
</mat-list-item>
</mat-selection-list>
</mat-expansion-panel>
答案 1 :(得分:2)
由于每个公司都有产品,因此必须在公司级别列出产品。然后需要嵌套HTML,以便company
在检索产品时具有作用域。
<mat-expansion-panel *ngFor="let company of companies">
<mat-expansion-panel-header>
<mat-panel-title>{{ company.name }}</mat-panel-title>
</mat-expansion-panel-header>
<mat-selection-list>
<mat-list-item *ngFor="let product of company.products">
{{ product.name }}
</mat-list-item>
</mat-selection-list>
</mat-expansion-panel>
此方法的其他替代方法可能是:
答案 2 :(得分:0)
let company.products产品
编辑
抱歉,我没有注意到第二个ngFor不在外部ngFor之下。 我对角材料并不完全精通,但是我会快速地看一下,并告诉您是否有适合您的解决方案
编辑
您想将ngFor放在mat-expansion-panel中,而不是在mat-expansion-panel标头中。然后让company.products的产品