我有一个Angular 2的Kendo UI Grid可能有很多数据。因此,我正在使用包含计数的API调用并将数据放入分页网格中。当我单击“导出到Excel”按钮时,它仅返回显示的数据。我希望能够导出整个数据集。
我认为我应该使用fetchData方法并将其包含在网格中,如下所示:
<kendo-grid-excel fileName="MyExport.xlsx" [fetchData]="allResults"></kendo-grid-excel>
但是,allResults方法必须返回ExcelExportData对象。我对API的方法调用返回一个然后被解析的observable。我已尝试在subscribe事件中返回数据,但它给我一个TypeScript错误,该方法必须返回一个值。如果我将返回类型更改为&#34;任何&#34;,则在我打电话给&#34时失败;这个&#34;从外部获取过滤器时。
这是我目前的获取方法:
allResults(): ExcelExportData {
if (!this.sort.length) {
this.sort.push({ field: undefined, dir: undefined });
}
this.myService.resultsGet(
this.filters.date,
...
undefined, // skip
undefined, // take
this.sort[0].field,
this.sort[0].dir
).subscribe(
(pagedList: any) => {
for (let item of pagedList.results) {
// manipulate a few things here
}
return { data: pagedList.results };
},
e => { console.log(`error: ${e}`); }
);
}
有没有办法设置它来使用角度组件过滤器进行外部API调用并通过订阅返回数据?
提前致谢!
答案 0 :(得分:0)
看起来有两件事情发生了:
此未定义:fetchData未在组件实例的上下文中调用,因此您需要自己绑定
this.allResults = this.allResults.bind(this);
总而言之,你得到这样的东西:
constructor(
public myService: MyService
) {
this.allResults = this.allResults.bind(this);
}
allResults() {
if (!this.sort.length) {
this.sort.push({ field: undefined, dir: undefined });
}
this.myService.resultsGet(
this.filters.date,
...
0, // skip
undefined, // take
this.sort[0].field,
this.sort[0].dir
).map(response => {
// manipulate a few things here
return <GridDataResult> {
data: response.value,
total: response.count
}
}
更新:根据Telerik的一个例子,这是一个显示此内容的plunker。