Element ui表格数据无法将分页数据导出问题

时间:2024-03-12 07:13:52

问题:

  将两表格导入页面后,设置分页,无法将分页后的数据导出excel,只能导出第一页;

解决办法:

  通过$nextTick(),简单的来说是在下次DOM更新循环结束之后执行延迟回调,在修改数据之后使用$nextTick,则可以在回调中获取更新后的DOM(dom的改变是发生在nextTick()之后),这个方法作用是当数据被修改后使用这个方法,会回调获取更新后的dom再render出来。

  Vue.nextTick()作用:在下次dom更新循环结束之后,执行延迟回调。在修改数据之后立即使用这个方法,获得更新后的dom。

  简而言之,如果你在数据改变之后的操作跟改变之后的DOM有关,那么就应该使用Vue.nextTick()。

怎么做?

1、Element组件库中的el-table表格导出需要的主要是两个依赖:(xlsx 和 file-saver)

1 npm install --save xlsx file-saver

2、导出表格,方法:

 1 // 数据导出写入Excel
 2     exportExcel() {
 3       this.currentPage = 1; //当前页为第一页
 4       this.limit = this.total; //每页大小限制条数:为总条数(将表格数据全部渲染出来在第一页上)
 5       this.$nextTick(function () {
 6         var wb = XLSX.utils.table_to_book(document.querySelector("#out-table"));
 7         /* 获取二进制字符串作为输出 */
 8         var wbout = XLSX.write(wb, {
 9           bookType: "xlsx",
10           bookSST: true,
11           type: "array",
12         });
13         try {
14           FileSaver.saveAs(
15             new Blob([wbout], { type: "application/octet-stream" }),
16             "历史记录.xlsx"
17           );
18         } catch (e) {
19           if (typeof console !== "undefined") console.log(e, wbout);
20         }
21         this.limit = 15;  //导出之后再恢复原样,每页大小为限制条数为15条
22         return wbout;
23       });
24     },