我发现了一些类似的问题,但没有一个能帮助我解决这个问题。通过 Web API,我在终结点上提供了以下 json。
[
{
"counterparty": "JP X",
"callback": [
{
"contractId": 1,
"buy": true,
"instrument": "PET",
"tradeDate": "29/06/2020"
},
{
"contractId": 2,
"buy": true,
"instrument": "PETW"
"tradeDate": "29/06/2020"
}]},
{
"counterparty": "JP",
"callback": [
{
"contractId": 12,
"buy": true,
"instrument": "PETR",
"tradeDate": "29/06/2020"
}]
}
]
我必须在ngx-datatable
中组织这些数据,以便每行对应于counterparty
字段,并且有一个ngx-datatable-row-detail
,我可以在其中显示callback
数组中的信息。使用服务连接到 webapi 后,我使用以下函数在 component.ts 中接收数据:
@Component({
selector: 'app-callback',
templateUrl: './callback-salesbonds.component.html',
styleUrls: ['./callback-salesbonds.component.scss']
})
export class CallbackSalesBondsComponent implements OnInit {
@ViewChild('tableWrapperList') tableWrapper;
@ViewChild('tableList') table: DatatableComponent;
currentComponentWidth;
operations: any;
constructor(private callbackService: CallbackService,
private ref: ChangeDetectorRef,
private fb: FormBuilder)
{
this.filter = fb.group({
tradeDate: new FormControl(new Date())
});
}
public getOperations = () => {
var operations = this.callbackService
.SendDate(this.filter.get('tradeDate').value)
.subscribe(source => this.operations = source);
}
ngAfterContentChecked(){
if (this.table && this.table.recalculate && (this.tableWrapper.nativeElement.clientWidth !== this.currentComponentWidth)) {
setTimeout(() => {
this.currentComponentWidth = this.tableWrapper.nativeElement.clientWidth;
this.table.recalculate();
this.ref.detectChanges();
window.dispatchEvent(new Event('resize'));
}, 300);
}
}
toggleExpandRow(row) {
this.table.rowDetail.toggleExpandRow(row);
}
我的.html组件如下所示:
<pg-container>
<div class="row">
<div class="table table-responsive mt-0">
<div class="bg-black table-responsive collapse-border" #tableWrapperList
ng>
<ngx-datatable #tableList
[columnMode]="'flex'"
[rows]="operations"
<ngx-datatable-row-detail [rowHeight]="150" #myDetailRow>
<ng-template let-row="row" let-expanded="expanded" ngx-datatable-row-detail-template>
<table class="table table-inline m-l-40 m-r-40 m-t-10">
<tr *ngFor="let r of row">
<td class="row-detail-td-title">contractId</td>
<td class="row-detail-td">{{r.callback.contractId}}</td>
</tr>
<tr *ngFor="let r of row">
<td class="row-detail-td-title">Buy</td>
<td class="row-detail-td">{{r.callback.buy}}</td>
</tr>
<tr *ngFor="let r of row">
<td class="row-detail-td-title">Instrument</td>
<td class="row-detail-td">{{r.callback.instrument}}</td>
</tr>
</table>
</ng-template>
</ngx-datatable-row-detail>
<ngx-datatable-column [flexGrow]=5 name="Contraparte" prop="counterparty" cellClass="d-flex align-items-center text-center" headerClass="text-center">
<ng-template let-value="value" ngx-datatable-cell-template>
{{value}}
</ng-template>
</ngx-datatable-column>
<ngx-datatable-column [flexGrow]="0.5" [sortable]="false" cellClass="d-flex align-items-center text-center">
<ng-template let-row="row" let-expanded="expanded" ngx-datatable-cell-template>
<a
href="javascript:void(0)"
[ngClass]="expanded ? 'fa fa-search-minus' : 'fa fa-search-plus'"
title="Expand/Collapse Row"
(click)="toggleExpandRow(row)"
>
</a>
</ng-template>
</ngx-datatable-column>
</ngx-datatable>
</div>
</div>
</div>
</pg-container>
我可以将counterparty
字段带到表中,但是当我单击以获取每个交易对手callback
中的数据时,我犯了以下错误:
错误:找不到不同的支持对象"[对象对象]" 类型为"对象"。NgFor 仅支持绑定到可迭代对象,例如 阵 列。 在NgForOf.push../node_modules/@angular/common/fesm5/common.js.NgForOf.ngOnChanges
谁能告诉我哪里出错了?
我找到了解决方案,只需使用 ngFor 迭代回调数组:
<ngx-datatable-row-detail [rowHeight]="150" #myDetailRow>
<ng-template let-row="row" let-expanded="expanded" ngx-datatable-row-detail-template>
<table class="table table-inline m-l-40 m-r-40 m-t-10" *ngFor="let r of row.callback">
<tr>
<td class="row-detail-td-title">contractId</td>
<td class="row-detail-td">{{r.contractId}}</td>
</tr>
<tr>
<td class="row-detail-td-title">Buy</td>
<td class="row-detail-td">{{r.buy}}</td>
</tr>
<tr>
<td class="row-detail-td-title">Instrument</td>
<td class="row-detail-td">{{r.instrument}}</td>
</tr>
</table>
</ng-template>
</ngx-datatable-row-detail>