layui数据表格中导出所有数据的简易解决办法

layui数据表格中导出所有数据的简易解决办法

官方文档的困惑

首先要说明的是:layui在 table 的工具栏内置了数据导出按钮,如果你是用它内置的导出按钮来导出数据,是没有问题的。但内置的按钮毕竟不太美观,很多时候你可能想通过自己定义的按钮来导出数据,这个时候,我们去参考官方文档,会发现,官方的介绍是非常模糊不清的,请看官方的介绍:
语法:table.exportFile(id, data, type)
代码示例:

var ins1 = table.render({
  elem: '#demo'
  ,id: 'test'
  //,…… //其它参数
})      
      
//将上述表格示例导出为 csv 文件
table.exportFile(ins1.config.id, data); //data 为该实例中的任意数量的数据
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

绝大多数盆友被这个data变量弄懵逼了,如果直接用它,浏览器会无情的提示:“Uncaught ReferenceError: data is not defined”。
其实,官方例子中的这个data变量,应该是表格数据的集合,但是,官方没说清楚这个data数据要从哪里来,以致于很多小伙伴被弄得一头雾水。

解决办法

先看前端界面
在这里插入图片描述
例如,我要通过单击上图中的“导出”按钮来导出表格中的所有数据,那么我们在html文件中的代码可以像下面这样写:

<!--工具栏-->
    <okToolbar>
        <button class="layui-btn" id="addUser">
            <i class="iconfont icon-tianjiayonghu1" ></i> 添加
        </button>
        <button class="layui-btn layui-btn-danger" id="batchDel">
            <i class="iconfont icon-shanchu"></i> 删除
        </button>
        <button class="layui-btn layui-btn-warm" id="batchDisabled">
            <i class="iconfont icon-tingyong"></i> 锁定
        </button>
        <button class="layui-btn layui-btn-normal" id="batchEnabled">
            <i class="iconfont icon-qiyong"></i> 解锁
        </button>
        <button class="layui-btn" id="export">
            <i class="iconfont icon-export"></i> 导出
        </button>
        <span>共有数据:<i id="countNum"></i> 条</span>
    </okToolbar>
    <!--数据表格-->
    <table class="layui-hide" id="table1" lay-filter="tableFilter"></table>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

注意:上面代码中“导出”按钮的id为“export”,表格的id为table1。

js代码:

<script>
    layui.use(['element', 'table', 'form', 'jquery', 'laydate','layer'], function () {
        var table = layui.table;         //表格
        var form = layui.form;           //表单
        var layer = layui.layer;         //弹层
        var $ = layui.jquery;

        var ins1=table.render({
            elem: '#table1',
            url: '/ant-admin/data/user.json',
            limit: 10,
            page:true,
            cols: [[
                {type: 'checkbox'},
                {field: 'id', title: 'ID',80, sort: true,align: 'center'},
                {field: 'username', title: '用户名', sort: true,align: 'center'},
                {field: 'status', title: '状态', templet: '#statusTpl',align: 'center'},
                {field: 'role', title: '角色类型', templet: '#roleTpl',sort: true,align: 'center'},
                {field: 'phone', title: '手机',align: 'center'},
                {field: 'createTime', title: '创建时间',align: 'center'},
                {field: 'lastLoginTime', title: '最近登录时间',align: 'center'},
                {field: 'logins', title: '登陆次数',sort: true,align: 'center',100},
                {fixed: 'right', title: '操作', align:'center', minWidth:160,toolbar: '#barDemo'}
            ]],
            done: function (res, curr, count) {
                exportData=res.data;
            }
        });

        $("#export").click(function(){
	       	table.exportFile(ins1.config.id,exportData, 'xls');
        })
    })
</script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

要点:
1、在表格渲染完成后的回调函数中,定义一个全局变量exportData,让它取得表格中的数据集合。就是下面这行

exportData=res.data;
  • 1

2、在导出数据时将变量exportData作为data变量传给table.exportFile(id, data, type) 函数。这样就大功告成了,怎么样,是不是很简单!

3、需要说明的是:table.exportFile函数的第三个参数type默认是导出csv格式文件,要导出xls文件的话,把它设置成‘xls’就可以了。

原文地址:https://www.cnblogs.com/onesea/p/13712162.html