【发布时间】:2020-06-28 03:51:03
【问题描述】:
我有一个这样的 agggrid 组件:
private gridOptions = {
columnDefs: this.columnDefs,
frameworkComponents: { buttonRenderer: ButtonRenderer},
pagination: true,
paginationPageSize: 20,
cacheBlockSize: 20,
// server side paging
rowModelType: 'infinite',
datasource: this.dataSource
};
private dataSource: IDatasource = {
getRows: (params: IGetRowsParams) => {
var query = { startrow: params.startRow,
endrow: params.endRow,
company_name: this.companyName,
company_address: this.companyAddress,
company_capital: this.companyCapital
};
this.http.post(environment.api_url + "/register/search",query).subscribe((results:any) => {
params.successCallback(results.data, results.totalRecords);
this.gridApi.refresh();
});
}
};
aggrid 首次加载时,正常显示。如果我按下一页,我会收到此错误:
ERROR Error: "ag-Grid: cannot get grid to draw rows when it is in the middle
of drawing rows. Your code probably called a grid API method while the grid
was in the render stage. To overcome this, put the API call into a timeout,
eg instead of api.refreshView(), call setTimeout(function()
{api.refreshView(),0}). To see what part of your code that caused the
refresh check this stacktrace."
有什么例子可以参考吗?我四处搜寻,但没有这个似乎每个人都做得很好 问题。
顺便说一句:我正在使用angular 8,aggrid 22.1.1
【问题讨论】:
-
我猜你不应该在调用successCallback之后调用网格的refresh()方法,这可能也触发了刷新。如果您确实需要调用 refresh(),请尝试在 setTimeout() 中调用
-
感谢您的回答。这对我来说是一个 valueFormatter 问题。如果我从列定义中删除 valueFormatter,一切正常。当我检查 chrome 控制台时,我看到格式化程序函数未定义单元格值。我不知道如何修复它,所以我删除了所有 valueFormatter。之后一切正常。
-
一个提示 - 我发现组件暴露给网格的函数(valueGetters、valueSetters、valueFormatters 等)必须是 Lambda(“胖箭头函数”),而不仅仅是组件的普通方法。 Lambda 绑定了“this”,而普通方法没有。
-
我在使用 agGrid 24.1 时也遇到了这个问题,而且我的 Angular 代码没有任何 valueFormatter 或对 refresh() 的调用。我有一个带有两级细节网格的主网格,如果我只扩展/收缩几行,在点击之间留下一个健康的停顿,我仍然会收到这个错误......我不知道为什么。