原文地址:https://blog.csdn.net/abubu123/article/details/78060321

bootstrap的table属性已经很熟悉了,最近遇到一个问题,犹豫每个列表加载的数据需求不同,所以需要动态的更换表头。 网上有很多加载表格数据的例子,但是却没有找到如何动态加载表格,再加在数据。 虽然可以一个表格加载一种数据,但是本着学习的态度尝试了下这种方式,结果发现是可以执行的。分享下思路和实现过程,以备日后使用。

思路:

1、写接口,查询出要展示的列。注意接口中必须要有字段中文名称(columns属性的title值),字段的英文名称(columns的field字段),特别注意filed字段应该与最后查询出的列表中返回的json数据中的key保持一致,不然取不到值。

2、ajax请求刚才的接口,查询出columns,并给table的columns赋值。

3、加载表格展示。

大致代码如下:

表格:

var peopleOptions;
    // 人口列表加载
    function tableItem() {
        peopleOptions = {
            method : "POST", // 使用get请求到服务器获取数据
            url : path + "/api/information/people/getList", // 获取数据的地址
            contentType : "application/x-www-form-urlencoded",// 重要否则POST会报错
            striped : false, // 表格显示条纹
            pagination : true, // 启动分页
            pageSize : 10, // 每页显示的记录数
            pageNumber : 1, // 当前第几页
            pageList : [ 10, 20, 50 ], // 记录数可选列表
            uniqueId : "id",
            showColumns : false, // 显示下拉框勾选要显示的列
            showToggle : false, // 显示 切换试图(table/card)按钮
            clickToSelect : false, // 点击可选
            singleSelect : false, // 禁止多选
            maintainSelected : true, // 在点击分页按钮或搜索按钮时,将记住checkbox的选择项
            sortable : true, // 禁止所有列的排序
            sidePagination : "server", // 表示服务端请求 后台分页
            toolbar : "#toolbar",// 指明自定义的toolbar
            queryParamsType : "undefined",
            queryParams : function queryParams(params) {
                var param = {
                    pageNumber : params.pageNumber,
                    pageSize : params.pageSize,
                    orgId : ztreeId,
                    nodeId : ztreeId,
                    citizenName : $("#fullname").val().trim(),
                    sex : $("#sex").val(),
                    age : $("#age").val().trim(),
                    identityCode : $("#idCard").val().trim(),
                    cellPhone : $("#isMobile").val().trim(),
                    adress : $("#adress").val().trim(),
                };
                return param;
            },
            onLoadSuccess : function() { // 加载成功时执行
                responseHandler : function(res) { // 格式化数据
                    console.log(res);
                    if (res.data.total != undefined)
                        tmp = {
                            total : res.data.total,
                            rows : res.data.rows
                        };
                    if (res.data.total == undefined)
                        tmp = {
                            total : res.data.length,
                            rows : res.data
                        };
                    return tmp;
                },
                columns : [ {
                    checkbox : true,
                    title : '全选',
                    valign : 'middle'
                }, {
                    title : '序号',
                    field : 'number',
                    width : '40px',
                    align : 'center',
                    valign : 'middle',
                    formatter : indexFormatter
                }, {
                    title : '姓名',
                    field : 'citizenName',
                    align : 'center',
                    valign : 'middle',
                },  {
                    title : '年龄',
                    field : 'age',
                    align : 'center',
                    width : 28,
                    valign : 'middle',
                    formatter : ageFormatter
                }, {
                    title : '性别',
                    field : 'sex',
                    width : 28,
                    align : 'center',
                    valign : 'middle',
                },{
                    title : '身份证号',
                    field : 'identityCode',
                    align : 'center',
                    valign : 'middle',
                }, {
                    title : '民族',
                    field : 'nation',
                    align : 'center',
                    valign : 'middle',
                } ]
            }
    }
        $table = $("#table").bootstrapTable(peopleOptions);
    };

动态获取列:

function getColumns() {
        // 加载动态表格
        $.ajax({
            url : path + "api/information/people/getLableColumn?ztreeId=" + ztreeId,
            type : 'get',
            dataType : "json",
            async : false,
            success : function(returnValue) {
                // 未查询到相应的列,展示默认列
                if (returnValue.retCode == "0") {
                    //没查到列的时候把之前的列再给它
                    myColumns = $table.bootstrapTable('getOptions').columns[0];
                } else {
                    // 异步获取要动态生成的列
                    var arr = returnValue.data;
                    $.each(arr, function(i, item) {
                        myColumns.push({
                            "field" : item.labelColumnCode,
                            "title" : item.labelColumnName,
                            "hide" : true,
                            "align" : 'center',
                            "valign" : 'middle'
                        });
                    });
                }
                console.log(myColumns);
                return myColumns;
            }
        });
    }

刷新列表:

//点击左侧树后重新加载表格
        $table.bootstrapTable(  
                      "refreshOptions",  
                      {  
                        url : path + "/api/peopledataInfo/getPeopleInfoList", // 获取数据的地址
                        columns : myColumns,
                        
                      }  
              );
          }

需要注意的是bootstrap的table提供了两个刷新的方法,一个refresh,一个refreshOptions,前者只是刷新当前表格,后者会将表格中的组件全部更新一遍,因为我们替换了url和columns,所以需要调用后者。

展示效果:

动态加载表头其实就是类似Echart中动态加载数据的感觉一样,只是改变整个Option中的相关属性即可。

优点:代码量会大大减少,当我们要加载不同数据且样式一样的表格的时候可以采用这样的方式。

缺点:样式很难维护。前端人员不好定位bug,所以很难修改相应的样式bug。

依据项目实际情况,择优使用吧。

[转]bootstrap的table插件动态加载表头的更多相关文章

  1. bootstrap table插件动态加载表头

    这篇文章主要为大家详细介绍了bootstrap table插件动态加载表头,具有一定的参考价值,感兴趣的小伙伴们可以参考一下   bootstrap的table属性已经很熟悉了,最近遇到一个问题,犹豫 ...

  2. 项目总结—jQuery EasyUI-DataGrid动态加载表头

    http://blog.csdn.net/zwk626542417/article/details/19248747 概要 在前面两篇文章中,我们已经介绍了在jQuery EasyUI-DataGri ...

  3. jQuery EasyUI-DataGrid动态加载表头

    项目总结—jQuery EasyUI-DataGrid动态加载表头     目录(?)[-] 概要 实现 总结   概要 在前面两篇文章中,我们已经介绍了在jQuery EasyUI-DataGrid ...

  4. js插件动态加载js、css解决方案

    最近因为工作需要做了一个js自动导入的插件,一开始很天真的以为动态创建个script添加到head中就ok了,试了之后才发现了问题,就是如果同时引入了多个js文件,而且后一个文件中用到了前一个文件中的 ...

  5. zTree树插件动态加载

    需求: 由于项目中家谱图数据量超大,而一般加载方式是通过,页面加载时 zTree.init方法进行数据加载,将所有数据一次性加载到页面中.而在项目中家谱级别又非常广而深,成千上万级,因此一次加载,完全 ...

  6. EasyUI datagrid 动态加载表头和数据

    首先返回到页面的需要是JSON数据: 第一步: 遍历表头,插入到array中 for (var i = 0; i < jsonObj.title.length; i++) { //把返回的数据封 ...

  7. C# 实现动态加载DLL插件 及HRESULT:0x80131047处理

    本代码实现DLL的动态加载, 类似PS里的滤镜插件! 1. 建立一个接口项目类库,此处名称为:Test.IPlugin using System; namespace Test.IPlugin { p ...

  8. 动态加载DataGrid表头及数据

    初始化表头 js生成前端 /*初始化表头*/ function initDataGridTitle(id) { $.ajax({ url: '/${appName}/report/***/***', ...

  9. Bootstrap Table表格一直加载(load)不了数据-解决办法

    bootstrap-table是一个基于Bootstrap风格的强大的表格插件神器,官网:http://bootstrap-table.wenzhixin.net.cn/zh-cn/ 这里列出遇到的一 ...

随机推荐

  1. Linux下实现脚本监测特定进程占用内存情况

    Linux系统下,我们可以利用以下命令来获取特定进程的运行情况: cat /proc/$PID/status 其中PID是具体的进程号,这个命令打印出/proc/特定进程/status文件的内容,信息 ...

  2. [javase学习笔记]-7.2 构造函数与一般函数的差别

    这一节我们简单学习一下构造函数与一般函数之间的差别所在. 那么它们有什么差别呢,结合上一节,我们能够总结出下面两点差别: 第一个差别: 构造函数:对象创建时,就会调用与之相应的构造函数,对对象进行初始 ...

  3. 实用的php购物车程序

    实用的php教程购物车程序以前有用过一个感觉不错,不过看了这个感觉也很好,所以介绍给需要的朋友参考一下. <?php//调用实例require_once 'cart.class.php';ses ...

  4. Unity3D对apk反编译、重编译、重签名

    本文源链接:http://blog.csdn.net/qq393830887/article/details/56025923 工具 Java环境 Apktool(这玩意有些坑爹,不是官网最新的就好, ...

  5. js前台取用后台传递过来的map集合方式

    在处理有些特殊需求的时候,我们需要在前台页面的js中获取后台传递过来的map集合类型的参数,并且进行调用,代码如下: 在后台我们拼装出如下的集合: Map<String,Grade> gr ...

  6. python yield的解释

    链接地址: http://pyzh.readthedocs.io/en/latest/the-python-yield-keyword-explained.html https://www.jians ...

  7. ELK logstash邮件报警

    这个方法有一个问题就是我这边不能给我们公司的邮箱发邮件.还有就是我们有两个邮箱一个是腾讯企业邮箱,还有一个就是我们的集团邮箱 使用下面的这个方法是不能给我们的集团邮箱发邮件的.第二个问题就是这个方法给 ...

  8. 【八】注入框架RoboGuice使用:(Your First Injected Fragment)

        上一篇我们简单的介绍了一下RoboGuice的使用([七]注入框架RoboGuice使用:(Your First Custom Binding)),今天我们来看下fragment的注解     ...

  9. 关于有些.aidl源码的eclipse编译后生成.java文件的错

    最近下载了一个aidl源码.导入到eclipse.一直报错.无法运行到. (我是1号图) 2. .然后怎么想都不知道怎么解决.百度和谷歌了n遍. 还是找不到.后来在一个不起眼的地方看到说: aidl不 ...

  10. GlobalConfig

    -- 0 - disable debug info, 1 - less debug info, 2 - verbose debug info DEBUG = EDITOR = false -- DEB ...