問題:
將兩表格導入頁面后,設置分頁,無法將分頁后的數據導出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 },