我有一个看似简单的问题,已经困扰我好几天了。显然,在ag-grid的历史上,从来没有人像谷歌搜索结果完全缺乏所显示的那样,遇到过这个问题。
我正在尝试为我的一列实现一个简单的值格式化程序。下面是列定义...
...
{
headerName: 'OT Unit',
field: 'otUnitCode',
valueFormatter: this.formatOTUnit.bind(this)
},
....
帮助函数'this.formatOTUnit(...)‘是这样定义的:
formatOTUnit(params) {
console.log(params);
this.service.getOTUnitDesc(params.data.otUnitCode).subscribe((desc) => {
console.log(desc);
return desc;
});
}
基本上,此函数采用存储在JSON中的数字代码,并调用一个异步函数来获取相应的描述。这是我想要在表格单元格中显示的描述(而不是数字代码)。
console.log(params)
向我展示了事件对象,其中包含了需要转换的代码(params.data.otUnitCode),而console.log(desc)
则显示了正确的描述。但是,表格中的单元格为空。
这里我漏掉了什么?ag-grid不支持异步回调作为valueFormatter吗?
发布于 2020-01-24 03:24:13
问题似乎是围绕在单元格渲染器中无法访问的'this‘全局引用,所以'this.service’是未定义的。
我做了更多的研究,找到了一个可能的解决方案。首先,gridOptions需要定义一个上下文,该上下文具有对服务组件的引用。
this.gridOptions = {
pagination: true,
paginationAutoPageSize: true,
context: {
myService: this.myService
}
然后,在单元格渲染器中:
otUnitRenderer(params) {
var obsValue = undefined;
var sub = params.context.myService.getOTUnitDesc(params.value).subscribe(v => obsValue = v);
sub.unsubscribe();
return "<span>" + params.value + " : " + obsValue +"</span>";
}
https://stackoverflow.com/questions/59866903
复制相似问题