vue2.0项目结合elm-ui封装的导出当前表格功能
当前环境: vue2.0、elm-ui【对应2版本】、filesaver.js【最新版本】、xlsx.js 【^0.16.0】 xlsx我安装的时候最新版本有问题我安装的是0.16的!
安装插件
npm install file-saver --save
npm install xlsx
//以elm为例:
在 table 添加 id='outTable'
<el-table id="outTable">
exportform.js //封装的导出功能
import {
Message
} from 'element-ui';
import FileSaver from "file-saver";
import XLSX from "xlsx";
const exportform = {
/*
bind 钩子函数,第一次绑定时调用,可以在这里做初始化设置
el: 作用的 dom 对象
value: 传给指令的值,
*/
bind(el, {
value
}) {
el.$value = value; // 用一个全局属性来存传进来的值,因为这个值在别的钩子函数里还会用到
el.handler = () => {
if (!el.$value) {
// 值为空的时候,给出提示,我这里的提示是用的 ant-design-vue 的提示,你们随意
Message({
message: '无文件名!',
type: 'warning',
customClass: 'zZindex'
});
return;
}
var workbook = XLSX.utils.table_to_book(document.querySelector("#outTable")); //把DOM TABLE元素转换为工作簿对象
var worksheet = workbook.Sheets[workbook.SheetNames[0]]; //返回一个表示工作表的对象。
var wopts = { bookType:'xlsx', bookSST:false, type:'array' };
var wbout = XLSX.write(workbook,wopts);
try {
FileSaver.saveAs(
new Blob([wbout], {
type: "application/octet-stream",
}),
el.$value + ".xlsx"
);
} catch (e) {
if (typeof console !== "undefined") console.log(e, workbook);
}
};
// 绑定点击事件,就是所谓的一键 copy 啦
el.addEventListener('click', el.handler);
},
// 当传进来的值更新的时候触发
componentUpdated(el, {
value
}) {
el.$value = value;
},
// 指令与元素解绑的时候,移除事件绑定
unbind(el) {
el.removeEventListener('click', el.handler);
},
};
export default exportform
directives.js //赋值内置指令
import exportform from './exportform.js';
// 自定义指令
const directives = {
exportform
};
export default {
install(Vue){
//处理多个指令用法
Object.keys(directives).forEach((key)=>{
Vue.directive(key,directives[key]);
})
}
}
main.js
import Directives from './directives'; //引入下就好
使用!!!!!
<button v-exportform="'我是导出的文件名'">点击导出</button>
end----
自己的技术这几年都没啥突破 、、害 压力好大!!!!