这篇文章主要为大家详细介绍了bootstrap table插件动态加载表头,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
 

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

思路:

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

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

3、加载表格展示。

大致代码如下:

表格:

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
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);
};

动态获取列:

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
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;
 }
 });
}

刷新列表:

1
2
3
4
5
6
7
8
9
10
//点击左侧树后重新加载表格
 $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插件动态加载表头

    原文地址:https://blog.csdn.net/abubu123/article/details/78060321 bootstrap的table属性已经很熟悉了,最近遇到一个问题,犹豫每个列表 ...

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

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

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

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

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

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

  5. bootstrap中的动态加载出来的图片轮播中的li标签中的class="active"的动态添加移除

    //该方法是在slide改变时立即触发该事件, $('#myCarousel').on('slide.bs.carousel', function () { $("#myCarousel o ...

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

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

  7. zTree树插件动态加载

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

  8. bootstrap 模态框动态加载数据

    .页面中添加modal <!-- 模态框(Modal) --> <div class="modal fade" id="showModal" ...

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

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

随机推荐

  1. java 使用GraphQL-关联对象

    GraphQL并不会实现关联查询,数据关联需要程序自己实现 官网首页有介绍获取多个资源只需要一个请求,如想获取用户信息和身份证信息,原来需要先查用户信息,再通过用户id查询身份证信息,而在GraphQ ...

  2. 超详细Vue实现导航栏绑定内容锚点+滚动动画+vue-router(hash模式可用)

    超详细Vue实现导航栏绑定内容锚点+滚动动画+vue-router(hash模式可用) 转载自:https://www.jianshu.com/p/2ad8c8b5bf75 亲测有效~ <tem ...

  3. Arm存储器

    Arm可以引出27根地址线,只能实现128MB的寻址,那么要如何实现1GB的寻址呢?答案就是使用nGCS片选线,nGCSx为低电平为选中相应的外接设备.一共八根片选线,也就是bank1,bank2-以 ...

  4. ES5_对象 与 继承

    1. 对象的定义 //定义对象 function User(){ //在构造方法中定义属性 this.name = '张三'; this.age = 12; //在构造方法中定义方法: this.ru ...

  5. SQL SERVER-Alwayson原理

    流程 1.异步提交模式 主副本无须确认该副本已经完成日志固化,就可提交事务. 主副本不受辅助副本的影响 辅助副本上的DB处于SYNCHRONIZING 2.同步提交模式 主副本要确认副本已经完成日志固 ...

  6. Android GOT Hook

    最后介绍的这种hook方式原理比较简单,只需要将GOT表中的目标函数地址替换为我们自己的函数地址即可,但它的缺点是只能对导入函数进行hook,还需要对elf文件的结构有所了解. 一.获取到GOT表在内 ...

  7. IAR8.X安装教程

    安装教程 1.下载 2.安装 3.和谐 1.下载 打开官网  找到要下载的版本3. 下载8.4下载地址 不支持中文路径,有点坑https://netstorage.iar.com/SuppDB/Pro ...

  8. 浅谈OpenStack与虚拟机的区别与联系

    很多不太明白OpenStack与虚拟机之间的区别,下面以KVM为例,给大家讲一下他们的区别和联系 OpenStack:开源管理项目OpenStack是一个旨在为公共及私有云的建设与管理提供软件的开源项 ...

  9. 神经网络MNIST数据集分类tensorboard

    今天分享同样数据集的CNN处理方式,同时加上tensorboard,可以看到清晰的结构图,迭代1000次acc收敛到0.992 先放代码,注释比较详细,变量名字看单词就能知道啥意思 import te ...

  10. 十三.Java使用Protobuf3

    为什么使用Protobuf? 本教程翻译自谷歌开发者官网,原文地址:https://developers.google.com/protocol-buffers/docs/javatutorial.开 ...