bootstrap table插件动态加载表头


Posted in Javascript onJuly 19, 2019

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,所以需要调用后者。

展示效果:

bootstrap table插件动态加载表头

bootstrap table插件动态加载表头

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

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

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

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
出现“不能执行已释放的Script代码”错误的原因及解决办法
Aug 29 Javascript
Google Map Api和GOOGLE Search Api整合实现代码
Jul 18 Javascript
初窥JQuery(二)事件机制(2)
Dec 06 Javascript
JavaScript实现点击按钮后变灰避免多次重复提交
Jul 15 Javascript
结合JQ1.9通过js正则判断各种浏览器版本的方法
Dec 30 Javascript
通过pjax实现无刷新翻页(兼容新版jquery)
Jan 31 Javascript
JS控制输入框内字符串长度
May 21 Javascript
利用CDN加速react webpack打包后的文件详解
Feb 22 Javascript
vue-router中scrollBehavior的巧妙用法
Jul 09 Javascript
Vue.js特性Scoped Slots的浅析
Feb 20 Javascript
bootstrap-table formatter 使用vue组件的方法
May 09 Javascript
通过实例解析chrome如何在mac环境中安装vue-devtools插件
Jul 10 Javascript
Vue数据驱动表单渲染,轻松搞定form表单
Jul 19 #Javascript
VueJS 取得 URL 参数值的方法
Jul 19 #Javascript
vue自定义表单生成器form-create使用详解
Jul 19 #Javascript
bootstrap table列和表头对不齐的解决方法
Jul 19 #Javascript
JS开发 富文本编辑器TinyMCE详解
Jul 19 #Javascript
更强大的vue ssr实现预取数据的方式
Jul 19 #Javascript
bootstrap table.js动态填充单元格数据的多种方法
Jul 18 #Javascript
You might like
php 应用程序安全防范技术研究
2009/09/25 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
PHP实现抽奖功能实例代码
2020/06/30 PHP
JavaScript页面刷新与弹出窗口问题的解决方法
2010/03/02 Javascript
jQuery第三课 修改元素属性及内容的代码
2010/03/14 Javascript
javascript避免数字计算精度误差的方法详解
2014/03/05 Javascript
javascript实现淘宝幻灯片广告展示效果
2015/04/27 Javascript
基于javascript实现按圆形排列DIV元素(三)
2016/12/02 Javascript
COM组件中调用JavaScript函数详解及实例
2017/02/23 Javascript
ES5 ES6中Array对象去除重复项的方法总结
2017/04/27 Javascript
AngularJS使用拦截器实现的loading功能完整实例
2017/05/17 Javascript
详解angularjs中的隔离作用域理解以及绑定策略
2017/05/31 Javascript
jQuery实现QQ空间汉字转拼音功能示例
2017/07/10 jQuery
浅谈vue单一组件下动态修改数据时的全部重渲染
2018/03/01 Javascript
浅谈React的最大亮点之虚拟DOM
2018/05/29 Javascript
angular4笔记系列之内置指令小结
2018/11/09 Javascript
javaScript把其它类型转换为Number类型
2019/10/13 Javascript
详解JavaScript 高阶函数
2020/09/14 Javascript
[00:20]DOTA2荣耀之路7:-ah fu-抢盾
2018/05/31 DOTA
pandas中Timestamp类用法详解
2017/12/11 Python
python计算两个矩形框重合百分比的实例
2018/11/07 Python
wxPython实现文本框基础组件
2019/11/18 Python
通过 Python 和 OpenCV 实现目标数量监控
2020/01/05 Python
使用PyQt5实现图片查看器的示例代码
2020/04/21 Python
美国知名的摄影器材销售网站:Adorama
2017/02/01 全球购物
全球立体声:World Wide Stereo
2018/09/29 全球购物
捷克家具销售网站:SCONTO Nábytek
2020/01/02 全球购物
Footshop法国:购买运动鞋
2020/01/19 全球购物
性能测试工程师的面试题
2015/02/20 面试题
小学生元旦感言
2014/02/26 职场文书
学生会副主席竞聘书
2014/03/31 职场文书
施工安全责任书
2014/04/14 职场文书
副主任竞聘演讲稿
2014/08/18 职场文书
领导干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话全文
2014/10/25 职场文书
2016教师节感恩话语
2015/12/09 职场文书