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 相关文章推荐
从零开始学习jQuery (八) 插播:jQuery实施方案
Feb 23 Javascript
javascript 快速排序函数代码
May 30 Javascript
关于extjs treepanel复选框选中父节点与子节点的问题
Apr 02 Javascript
Javascript获取background属性中url的值
Oct 17 Javascript
jQuery 检查某个元素在页面上是否存在实例代码
Oct 27 Javascript
15个非常实用的JavaScript代码片段
Dec 18 Javascript
BootStrap表单时间选择器详解
May 09 Javascript
JavaScript 对引擎、运行时、调用堆栈的概述理解
Oct 22 Javascript
vue实现select下拉显示隐藏功能
Sep 30 Javascript
d3.js 地铁轨道交通项目实战
Nov 27 Javascript
js实现九宫格抽奖
Mar 19 Javascript
解决vue单页面应用进入页面加载所有 js 的问题
Aug 12 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(1)
2006/10/09 PHP
改进的IP计数器
2006/10/09 PHP
laravel 5 实现模板主题功能(续)
2015/03/02 PHP
ThinkPHP的常用配置选项汇总
2016/03/24 PHP
根据分辨率不同,调用不同的css文件
2006/07/07 Javascript
使用TextRange获取输入框中光标的位
2006/10/14 Javascript
Dojo之路:如何利用Dojo实现Drag and Drop效果
2007/04/10 Javascript
jQuery 学习入门篇附实例代码
2010/03/16 Javascript
jQuery实现的类flash菜单效果代码
2010/05/17 Javascript
网页防止tab键的使用快速解决方法
2013/11/07 Javascript
Javascript中浮点数相乘的一个解决方法
2014/06/03 Javascript
理解javascript封装
2016/02/23 Javascript
JavaScript获取URL中参数querystring的方法详解
2016/10/11 Javascript
js实现移动端微信页面禁止字体放大
2017/02/16 Javascript
jQuery实现鼠标经过显示动画边框特效
2017/03/24 jQuery
Angular 2父子组件数据传递之@Input和@Output详解(下)
2017/07/05 Javascript
Vue绑定内联样式问题
2018/10/17 Javascript
JS阻止事件冒泡的方法详解
2019/08/26 Javascript
Vue实现购物小球抛物线的方法实例
2020/11/22 Vue.js
Python isinstance判断对象类型
2008/09/06 Python
详细解析Python当中的数据类型和变量
2015/04/25 Python
实例说明Python中比较运算符的使用
2015/05/13 Python
TF-IDF算法解析与Python实现方法详解
2017/11/16 Python
Python使用一行代码获取上个月是几月
2018/08/30 Python
Python实现 PS 图像调整中的亮度调整
2019/06/28 Python
python word转pdf代码实例
2019/08/16 Python
python编写微信公众号首图思路详解
2019/12/13 Python
python 爬取英雄联盟皮肤并下载的示例
2020/12/04 Python
实习评语
2013/12/16 职场文书
2014年单位植树节活动方案
2014/03/23 职场文书
不服从公司安排检讨书
2014/09/24 职场文书
2014年客服工作总结与计划
2014/12/09 职场文书
扬州个园导游词
2015/02/06 职场文书
2015年世界无车日活动总结
2015/03/23 职场文书
2016年共产党员公开承诺书
2016/03/24 职场文书
表扬信范文
2019/04/22 职场文书