ag-grid-angular:错误TypeError:rowData.forEach不起作用

时间:2018-12-03 01:17:29

标签: ag-grid ag-grid-angular

尝试将ag-grid-angular纳入我的项目。我已经成功地使其通过过滤和排序与静态数据一起使用。

我现在无法使用异步动态数据进行设置。

<ag-grid-angular 
style="width: 1100px; height: 1000px;" 
class="ag-theme-balham" 
[enableSorting]="true"
[enableFilter]="true" 
id ="mygrid"
[animateRows]="true"
[rowData]="rowss | async"
[columnDefs]="columnDefs"
>	
</ag-grid-angular>

在component.ts中:

public rowss: any = null;

this.rowss = this.Service.getReport(this.model)

我现在已经静态设置了列

columnDefs = [
        {headerName: 'Make', field: 'make' },
        {headerName: 'Model', field: 'model' },
        {headerName: 'Price', field: 'price'}
    ];

在Service.ts中:

getReport( request: ReportModel ) {
            return this.http.get( this.URL + super.jsonToQueryParam( request ) ).map(( response: Response ) => response.json() );
        }

我收到此错误消息:

enter image description here

ng:///ProdCtnReportModule/ProdCtnReportComponent.ngfactory.js:100 ERROR TypeError: rowData.forEach is not a function
    at ClientSideNodeManager.recursiveFunction (webpack-internal:///./node_modules/ag-grid/dist/lib/rowModels/clientSide/clientSideNodeManager.js:193)
    at ClientSideNodeManager.setRowData (webpack-internal:///./node_modules/ag-grid/dist/lib/rowModels/clientSide/clientSideNodeManager.js:65)
    at ClientSideRowModel.setRowData (webpack-internal:///./node_modules/ag-grid/dist/lib/rowModels/clientSide/clientSideRowModel.js:483)
    at GridApi.setRowData (webpack-internal:///./node_modules/ag-grid/dist/lib/gridApi.js:156)
    at Function.ComponentUtil.processOnChange (webpack-internal:///./node_modules/ag-grid/dist/lib/components/componentUtil.js:120)
    at AgGridNg2.ngOnChanges (webpack-internal:///./node_modules/ag-grid-angular/dist/agGridNg2.js:363)
    at checkAndUpdateDirectiveInline (webpack-internal:///./node_modules/@angular/core/esm5/core.js:12623)
    at checkAndUpdateNodeInline (webpack-internal:///./node_modules/@angular/core/esm5/core.js:14151)
    at checkAndUpdateNode (webpack-internal:///./node_modules/@angular/core/esm5/core.js:14094)
    at debugCheckAndUpdateNode (webpack-internal:///./node_modules/@angular/core/esm5/core.js:14987)

我们从API调用获得的数据与我静态设置数据时使用的数据相同。返回结果是一个请求的数组。 请告知需要做什么才能使其正常工作。

2 个答案:

答案 0 :(得分:1)

这里的错误是您试图将一个Observable分配为ag-grid的数据。
.map()返回一个observable,您应该订阅该observable并将其提供给ag-grid。

类似的东西-

const rowss$ = this.Service.getReport(this.model);
rowss$.subscribe(rowData => {
  params.api.setRowData(rowData);
});

请记住该错误-

  

rowData.forEach不是函数

很好地表明rowData不是数组。

关于地图与订阅here

的更多信息

答案 1 :(得分:0)

AgGrid-角形 1. 后端:首先确保您的后端正在返回对象数组 例如:列表详细信息= new ArrayList <>();

[
    {
        "stockId": 1,
        "side": "Buy",
        "status": "Saved"
     },
     {
        "stockId": 2,
        "side": "Sell",
        "status": "Saved"
     }
]

如果您使用企业版进行主从处理,则需要确保控制器中的findById返回一个由1个对象组成的数组[{}]

agGrid文档: https://www.ag-grid.com/javascript-grid-master-detail/ 在来自AgGrid doc示例的此链接中,下面的callRecords字段返回一个对象数组。

getDetailRowData: function(params) {
   params.successCallback(params.data.callRecords);
}

我希望这会有所帮助。