如何在导出 SlickGrid 数据时得到 loader/spinner?
How do I get a loader/spinner while exporting data of the SlickGrid?
我正在使用 slickgrid (2.12.2) 和 angular 8. 我想知道如何在数据导出到 csv、excel 或文件时显示 loader/spinner .因为如果数据很大,导出需要一些时间,使用的人可能会认为什么都没有发生...
我认为这样的东西应该适合你。根据 Angular-SlickGrid 来源,exportService.exportToFile
函数 returns 一个承诺。
您可以在调用该函数之前设置一个标志,并在导出完成后使用返回的承诺的 'then' 块停止微调器。
@Component({
...
})
export class MyComponent {
loading: boolean = false;
constructor (private exportService: ExportService ) {
...
}
exportToCSV (): Promise<bool> {
return this.exportService.exportToFile({
...
});
}
onExportBtnClicked () {
this.loading = true;
this.exportToCSV.then(() => {
// Assuming it succeeds.
this.loading = false;
});
}
}
Angular-SlickGrid还有以下输出属性。
@Output() onGridBeforeExportToFile = this.exportService.onGridBeforeExportToFile;
@Output() onGridAfterExportToFile = this.exportService.onGridAfterExportToFile;
@Output() onGridBeforeExportToExcel = this.excelExportService.onGridBeforeExportToExcel;
@Output() onGridAfterExportToExcel = this.excelExportService.onGridAfterExportToExcel;
在内部,Angular-SlickGrid 的菜单扩展使用 ExportService.exportToFile
,它发出一个事件,该事件(如上所示)从 angular-slickgrid 组件输出。
@Injectable()
export class ExportService {
...
onGridBeforeExportToFile = new Subject<boolean>();
onGridAfterExportToFile = new Subject<{ content?: string; filename: string; format: string; useUtf8WithBom: boolean; }>();
}
它们是 public,因此您可以直接在 ExportService 上访问它们。您可以在 onGridBeforeExportToFile
发出事件时将微调器标志设置为 true,在 onGridAfterExportToFile
发出时将微调器标志设置为 false。
总而言之,导出服务是与 Angular-SlickGrid 库导出相关的所有内容的来源,无论您是单击自定义按钮进行导出,还是单击 'Export in CSV format'菜单扩展等
请注意,我是 Angular-Slickgrid 的作者。从我看到的问题和答案来看,我似乎错过了我的 Wiki 中解释的这个功能(有很多 Wiki,请阅读它们)所以我更新了两个 Wiki Export to Excel and Export to File (CSV/TabDelimited), the Grouping Example 是唯一展示这个的演示功能,因为这是唯一可以拥有大量数据的功能(如果您选择使用演示中的 50k 行并使用分组)。
这是 Excel 导出
的更新 Wiki
选项 1(推荐)
查看
<span [hidden]="!processing">
<i class="fa fa-refresh fa-spin fa-lg fa-fw"></i>
</span>
<angular-slickgrid gridId="grid2"
[dataset]="dataset"
[columnDefinitions]="columnDefinitions"
[gridOptions]="gridOptions"
(onGridBeforeExportToExcel)="processing = true"
(onGridAfterExportToExcel)="processing = false"
(onAngularGridCreated)="angularGridReady($event)">
</angular-slickgrid>
组件
export class MyComponent() implements OnInit {
processing = false;
}
根据@Wingnod 的回答,您也可以在代码中订阅事件,但最好只使用事件发射器 (onGridBeforeExportToExcel)
,因为您不需要关心取消订阅,而且代码是清洁器。如果出于某种原因您确实希望订阅该活动,您可以通过这种方式进行
选项 2(不推荐)
查看
<angular-slickgrid gridId="grid2"
[dataset]="dataset"
[columnDefinitions]="columnDefinitions"
[gridOptions]="gridOptions"
(onAngularGridCreated)="angularGridReady($event)">
</angular-slickgrid>
组件
export class GridGroupingComponent implements OnInit, OnDestroy {
exportBeforeSub: Subscription;
exportAfterSub: Subscription;
ngOnDestroy() {
this.exportBeforeSub.unsubscribe();
this.exportAfterSub.unsubscribe();
}
angularGridReady(angularGrid: AngularGridInstance) {
this.angularGrid = angularGrid;
// display a spinner while downloading
this.exportBeforeSub = this.angularGrid.exportService.onGridBeforeExportToFile.subscribe(() => this.processing = true);
this.exportAfterSub = this.angularGrid.exportService.onGridAfterExportToFile.subscribe(() => this.processing = false);
}
}
您可以看到选项 1 更清晰且更易于实施。
我正在使用 slickgrid (2.12.2) 和 angular 8. 我想知道如何在数据导出到 csv、excel 或文件时显示 loader/spinner .因为如果数据很大,导出需要一些时间,使用的人可能会认为什么都没有发生...
我认为这样的东西应该适合你。根据 Angular-SlickGrid 来源,exportService.exportToFile
函数 returns 一个承诺。
您可以在调用该函数之前设置一个标志,并在导出完成后使用返回的承诺的 'then' 块停止微调器。
@Component({
...
})
export class MyComponent {
loading: boolean = false;
constructor (private exportService: ExportService ) {
...
}
exportToCSV (): Promise<bool> {
return this.exportService.exportToFile({
...
});
}
onExportBtnClicked () {
this.loading = true;
this.exportToCSV.then(() => {
// Assuming it succeeds.
this.loading = false;
});
}
}
Angular-SlickGrid还有以下输出属性。
@Output() onGridBeforeExportToFile = this.exportService.onGridBeforeExportToFile;
@Output() onGridAfterExportToFile = this.exportService.onGridAfterExportToFile;
@Output() onGridBeforeExportToExcel = this.excelExportService.onGridBeforeExportToExcel;
@Output() onGridAfterExportToExcel = this.excelExportService.onGridAfterExportToExcel;
在内部,Angular-SlickGrid 的菜单扩展使用 ExportService.exportToFile
,它发出一个事件,该事件(如上所示)从 angular-slickgrid 组件输出。
@Injectable()
export class ExportService {
...
onGridBeforeExportToFile = new Subject<boolean>();
onGridAfterExportToFile = new Subject<{ content?: string; filename: string; format: string; useUtf8WithBom: boolean; }>();
}
它们是 public,因此您可以直接在 ExportService 上访问它们。您可以在 onGridBeforeExportToFile
发出事件时将微调器标志设置为 true,在 onGridAfterExportToFile
发出时将微调器标志设置为 false。
总而言之,导出服务是与 Angular-SlickGrid 库导出相关的所有内容的来源,无论您是单击自定义按钮进行导出,还是单击 'Export in CSV format'菜单扩展等
请注意,我是 Angular-Slickgrid 的作者。从我看到的问题和答案来看,我似乎错过了我的 Wiki 中解释的这个功能(有很多 Wiki,请阅读它们)所以我更新了两个 Wiki Export to Excel and Export to File (CSV/TabDelimited), the Grouping Example 是唯一展示这个的演示功能,因为这是唯一可以拥有大量数据的功能(如果您选择使用演示中的 50k 行并使用分组)。
这是 Excel 导出
的更新 Wiki选项 1(推荐)
查看
<span [hidden]="!processing">
<i class="fa fa-refresh fa-spin fa-lg fa-fw"></i>
</span>
<angular-slickgrid gridId="grid2"
[dataset]="dataset"
[columnDefinitions]="columnDefinitions"
[gridOptions]="gridOptions"
(onGridBeforeExportToExcel)="processing = true"
(onGridAfterExportToExcel)="processing = false"
(onAngularGridCreated)="angularGridReady($event)">
</angular-slickgrid>
组件
export class MyComponent() implements OnInit {
processing = false;
}
根据@Wingnod 的回答,您也可以在代码中订阅事件,但最好只使用事件发射器 (onGridBeforeExportToExcel)
,因为您不需要关心取消订阅,而且代码是清洁器。如果出于某种原因您确实希望订阅该活动,您可以通过这种方式进行
选项 2(不推荐)
查看
<angular-slickgrid gridId="grid2"
[dataset]="dataset"
[columnDefinitions]="columnDefinitions"
[gridOptions]="gridOptions"
(onAngularGridCreated)="angularGridReady($event)">
</angular-slickgrid>
组件
export class GridGroupingComponent implements OnInit, OnDestroy {
exportBeforeSub: Subscription;
exportAfterSub: Subscription;
ngOnDestroy() {
this.exportBeforeSub.unsubscribe();
this.exportAfterSub.unsubscribe();
}
angularGridReady(angularGrid: AngularGridInstance) {
this.angularGrid = angularGrid;
// display a spinner while downloading
this.exportBeforeSub = this.angularGrid.exportService.onGridBeforeExportToFile.subscribe(() => this.processing = true);
this.exportAfterSub = this.angularGrid.exportService.onGridAfterExportToFile.subscribe(() => this.processing = false);
}
}
您可以看到选项 1 更清晰且更易于实施。