json - 在嵌套的 JSON 数组上使用 *ngFor
问题描述
我正在尝试使用扩展面板来保存数据库中的数据,以便更好地列出数据。
我正在尝试使用 *ngFor 打印出我的嵌套 JSON 数组。问题是我的 JSON 是嵌套的,我将如何做到这一点?
在这里,我试图在面板顶部打印出我的姓名和总销售额。单击它后,它应该使用嵌套数组中的其他数据打开下面板。
HTML
<mat-accordion>
<mat-expansion-panel *ngFor="let data of dataList">
<mat-expansion-panel-header>
<mat-panel-title>
{{data.name}}
</mat-panel-title>
<mat-panel-description>
{{data.total_sales}}
</mat-panel-description>
</mat-expansion-panel-header>
{{data.sales}}
</mat-expansion-panel>
</mat-accordion>
我的 get.http 函数返回JSON
{""
:{"name":null,
"total_sales":1200,
"sales": [
{
"name":null,
"masterID":"5049",
"beerline":"2",
"containerNo":"1",
"pluNo":"1",
"pluName":"Smirnoff 2cl",
"pluDepartment":"VODKA",
"pluPrice":"20.00",
"sold_count":"54"
},
{
"name":null,
"masterID":"4028",
"beerline":"8",
"containerNo":"4",
"pluNo":"1",
"pluName":"Smirnoff 2cl",
"pluDepartment":"VODKA",
"pluPrice":"20.00",
"sold_count":"1"
},
{
"name":null,
"masterID":"4028",
"beerline":"9",
"containerNo":"5",
"pluNo":"3",
"pluName":"Johnsrom",
"pluDepartment":"rom",
"pluPrice":"25.00",
"sold_count":"1"
},
{
"name":null,
"masterID":"4028",
"beerline":"10",
"containerNo":"6",
"pluNo":"3",
"pluName":"Johnsrom",
"pluDepartment":"rom",
"pluPrice":"25.00",
"sold_count":"1"
},
{
"name":null,
"masterID":"4028",
"beerline":"11",
"containerNo":"7",
"pluNo":"3",
"pluName":"Johnsrom",
"pluDepartment":"rom",
"pluPrice":"25.00",
"sold_count":"1"
},
{
"name":null,
"masterID":"4028",
"beerline":"12",
"containerNo":"8",
"pluNo":"3",
"pluName":"Johnsrom",
"pluDepartment":"rom",
"pluPrice":"25.00",
"sold_count":"1"
}
]},
"Show Room":
{
"name":"Show Room",
"total_sales":4110,
"sales":[
{
"name":"ShowRoom",
"masterID":"4028",
"beerline":"1",
"containerNo":"1",
"pluNo":"1",
"pluName":"Smirnoff2cl",
"pluDepartment":"VODKA",
"pluPrice":"20.00",
"sold_count":"198"
},
{
"name":"ShowRoom",
"masterID":"4028",
"beerline":"1",
"containerNo":"2",
"pluNo":"3",
"pluName":"Johnsrom",
"pluDepartment":"rom",
"pluPrice":"25.00",
"sold_count":"5"
},
{
"name":"ShowRoom",
"masterID":"4028",
"beerline":"3",
"containerNo":"2",
"pluNo":"3",
"pluName":"Johnsrom",
"pluDepartment":"rom",
"pluPrice":"25.00",
"sold_count":"1"
}
]},
"Henriks Place":
{
"name":"Henriks Place",
"total_sales":50,
"sales":
[
{
"name":"Henriks Place",
"masterID":"4028",
"beerline":"4",
"containerNo":"2",
"pluNo":"3",
"pluName":"Johnsrom",
"pluDepartment":"rom",
"pluPrice":"25.00",
"sold_count":"1"
},
{
"name":"Henriks Place",
"masterID":"4028",
"beerline":"6",
"containerNo":"3",
"pluNo":"3",
"pluName":"Johnsrom",
"pluDepartment":"rom",
"pluPrice":"25.00",
"sold_count":"1"
}
]
}
}
编辑:我得到的错误:
ERROR Error: Cannot find a differ supporting object '[object Object]' of type 'object'. NgFor only supports binding to Iterables such as Arrays.
at NgForOf.push../node_modules/@angular/common/fesm5/common.js.NgForOf.ngDoCheck (common.js:3152)
at checkAndUpdateDirectiveInline (core.js:9253)
at checkAndUpdateNodeInline (core.js:10514)
at checkAndUpdateNode (core.js:10476)
at debugCheckAndUpdateNode (core.js:11109)
at debugCheckDirectivesFn (core.js:11069)
at Object.eval [as updateDirectives] (SaleComponent.html:33)
at Object.debugUpdateDirectives [as updateDirectives] (core.js:11061)
at checkAndUpdateView (core.js:10458)
at callViewAction (core.js:10699)
返回json的函数:
getSale1(): Observable<Sale1Model[]> {
return this.http.get<Sale1Model[]>(API_URL + '/live/sale', this.httpUtils.getHTTPHeader())
}
编辑2:
这是我的模型课:
export class Sale1Model {
constructor(
public name: string,
public total_sales: string,
public sales: string[]) { }
解决方案
在面板主体上使用另一个 *ngFor 来迭代嵌套数组
<mat-accordion>
<mat-expansion-panel *ngFor="let data of dataList">
<mat-expansion-panel-header>
<mat-panel-title>
{{data.name}}
</mat-panel-title>
<mat-panel-description>
{{data.total_sales}}
</mat-panel-description>
</mat-expansion-panel-header>
<div class="sale-body" *ngFor="let s of data.sales"> <sale body here> </div>
</mat-expansion-panel>
</mat-accordion>
推荐阅读
- kotlin - Kotlin,具有 2 个实现和泛型的不可变接口
- tensorflow - ImportError:无法在 HuggingFace 变形金刚中导入名称“hf_bucket_url”
- swift - 在 Swift 中缩短 URL
- python - 如何在不写入 Python 文件的情况下处理 API 返回?
- javascript - javaScript中的if语句有问题
- python-3.x - 为什么选择属性(python)不起作用?
- visual-studio-code - 无法在vs代码上打开模拟器
- c++ - 检测 COFF 目标文件中的 C++ 内联符号
- serial-port - 为什么 serial.available 在此代码段中不起作用?
- delphi - 如何在 RichEdit 中保存然后恢复垂直滚动位置