Layui 数据表格动态cols(字段)动态变化

                                                             Layui数据表格动态cols(字段)动态变化

1、代码

<!-- HTML -->
<!-- 表格载体 -->
<div class="layui-form layui-card-header">
    <div class="layui-inline">
        <label class="layui-form-label">分组类型</label>
        <div class="layui-input-inline">
            <input type="hidden" name="group_type"/>
            <select multiple="multiple" lay-filter="group_type">
                <option value="">请选择分组类型</option>
                <option value="hobby" selected>爱好</option>
                <option value="age">年龄</option>
                <option value="date">日期</option>
            </select>
        </div>
    </div>
    <div class="layui-inline">
        <button class="layui-btn" lay-submit lay-filter="LAY-table-search">
            <i class="layui-icon layui-icon-search"></i>
        </button>
    </div>
</div>
<table id="table-id" lay-filter="LAY-table"></table>

//JS
<script>
    //JS
    layui.use(['table', 'form', 'multiSelect'], function () {
        let table = layui.table,
            form = layui.form;         //表格

        let tableObj = table.render({
            elem: '#table-id',   //挂载对象,表ID
            url: '/.../.../...',    //数据来源路径
            cols: [[
                {field: 'hobby', title: '爱好'},
                {field: 'come_in', title: '收入'},
                {field: 'come_out', title: '支出'}
            ]],
            text: { //自定义文本,如空数据时的异常提示等。
                none: '暂无数据!'
            },
            where:{'target_date':'2020-02'},//查询条件
            page: false, //关闭分页
            parseData: function(res) {  //res 即为原始返回的数据
                return {
                    code: res.code,
                    msg: res.msg,
                    count: res.data.count,
                    data: res.data.data
                }
            },
            done(res, curr, count){}
        });

        //监听下拉框的值
        let groupArray = ['hobby'];  //默认按爱好分组
        form.on('select(group_type)', function(data) {
            setTimeout(() => {	//选中获取值异常问题
                let value = data.value;
                let bool = $(data.othis).find('.layui-this').children('div').hasClass('layui-form-checked');//判断是否勾选
                let index = $.inArray(value, groupArray);
                if (bool) { //如果选中;
                    if(index == -1){  //数组没值,
                        groupArray.push(value);   //把值压入数组
                    }
                } else {    //如果取消选中
                    if(index != -1){  //数组中存在
                        groupArray.splice($.inArray(value, groupArray), 1);   //移除数组指定元素
                    }
                }
                $('input[name="group_type"]').val(JSON.stringify(groupArray));
            }, 100);
        })

        //监听搜索按钮
        form.on('submit(LAY-table-search)', function(data){
            let field = data.field;

            let tableCols = assembleTableCol(groupArray);	//重新定义标题那行

            //执行重载
            table.reload('LAY-table', { //通用渲染方式
                where: field,   //搜索的参数
                page: {curr: 1}, //重新从第 1 页开始
                cols: tableCols
            });
            //或
            tableObj.reload({   //方法级渲染
                where: field,   //搜索的参数
                page: {curr: 1}, //重新从第 1 页开始
                cols: tableCols
            });
        });

        //重新拼接数组标题行
        function assembleTableCol(groupArray){
            let thisCols = [];  //定义标题空间
            let defaultField = [    //定义通用列
                {field: 'come_in', title: '收入'},
                {field: 'come_out', title: '支出'}
            ];

            let groupField = {  //hobby,age,date 对应下拉框的值
                'hobby': {field: 'hobby', title: '爱好'},
                'age': {field: 'age', title: '年龄'},
                'date': {field: 'date', align:'center',title: '日期'},
            };
            let length = groupArray.length;
            for (let i=0; i<length; i++){ //追加动态标题
                let addObj = groupField[groupArray[i]];
                thisCols.push( addObj );
            }
            let defaultLength = defaultField.length;
            for(let j=0;j<defaultLength;j++){   //追加默认标题
                thisCols.push( defaultField[j]);
            }
            return [thisCols];  //注意结果为:array[0]=thisCols
        }

    });
</script>

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
layui是一款基于jQuery的前端UI框架,其中的数据表格组件可以快速实现数据的展示和操作。而动态扩展列是指在数据表格动态增加或删除列的操作。 在layui数据表格中,可以通过设置cols(列参数)来定义表格的列数和列属性。例如: ``` var table = layui.table; table.render({ elem: '#demo', url: '/data', cols: [[ {field: 'id', title: 'ID', width: 80}, {field: 'username', title: '用户名', width: 120}, {field: 'email', title: '邮箱', minWidth: 200}, {field: 'sex', title: '性别', width: 80}, {field: 'city', title: '城市', width: 100}, // 其他字段列... {field: '操作', title: '操作', toolbar: '#barDemo', width: 150} // 操作列 ]] }); ``` 在以上代码中,通过设置cols参数来定义表格的列属性,每个列使用一个对象来表示,其中field表示字段名,title表示列标题,width表示列宽度。除了基本的列属性外,还可以使用toolbar属性来定义某列的操作按钮,以实现扩展的功能。 如果要动态增加或删除列,可以在渲染表格之后,通过遍历并修改cols参数中的数组,实现列的增加或删除。例如: ``` var newCols = table.config.cols; // 获取当前表格的列参数 // 动态增加一个列 newCols[0].push({field: 'age', title: '年龄', width: 80}); // 动态删除一个列,可以通过遍历找到需要删除的列 for(var i=0; i<newCols[0].length; i++){ if(newCols[0][i].field === 'email'){ newCols[0].splice(i, 1); break; } } // 重新渲染表格 table.render({ elem: '#demo', url: '/data', cols: newCols }); ``` 通过以上代码,我们可以实现动态扩展列的功能。当需要增加或删除列时,可以修改cols参数,并重新渲染表格,即可实现动态扩展列的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值