layui table 使用小结

3,276 阅读5分钟
最近项目里使用了layui table
收集一下坑

1.使用layui table 建立多级表头表格


要建立多层级的表格主要通过cols:{ }的多层级数据进行构造。
根据表格文档可以知道:

,cols: [
    [{
        unresize:true,field: 'number',title: '序号',width: "3%",
align:'center',switchable:false,align: 'center',valign: 'middle', 
colspan: 1,rowspan: 2,
        // sort:true,
        // templet: '#xuhao'
    },
        {field : 'REGION_NAME',title : '区局', width : "4%",align: 'center',
 valign: 'middle', colspan: 1, rowspan: 2, unresize:true,
        },
        {field : 'REGION_other',title : '其他', width : "4%",align: 'center',
 valign: 'middle', colspan: 2, rowspan: 1, unresize:true,
        }],
        [
          {field : 'REGION_other1',title : '其他1', width : "4%",align: 'center',
 valign: 'middle', unresize:true,
        } ,
           {field : 'REGION_other2',title : '其他2', width : "4%",align: 'center',
 valign: 'middle', unresize:true,
        }   
        ]
        ]

以上是生成一个 序号 区局 [上表头]其他 [下表头]其他1,其他2 的一个表头。

这里的colspan和rowspan要用在第一层表头上(如果有两层表头)

colspan:1 rowspan:2 表示该表头占一列两行的位置

第二层表头不写col和row,会自动补齐到第一行空出来的位置。以此写多级表头。


2.再研究一下数据表格的详细参数(重点!):

table.render({
    elem: '#demo'
    ,skin: 'nob'
    ,height: 312
    ,url: '/demo/table/user/' //数据接口
    ,method : 'post'
    ,contentType : "application/x-www-form-urlencoded; charset=UTF-8"
    ,request:{
        pageName: 'pageNumber' //页码的参数名称,默认:page
        ,limitName: 'pageSize' //每页数据量的参数名,默认:limit
    
    }
    ,where:{
    //name:'wj'
    //,id:'111'//这里填需要携带的参数
},
,response: {
    statusName: 'status'
    ,status:null
    ,statusCode:null//规定成功的状态码,默认:0
    ,countName: 'total' //规定数据总数的字段名称,默认:count
    ,dataName: 'rows' //规定数据列表的字段名称,默认:data
}
    ,page: true //开启分页
    ,cols: [[ //表头
      {field: 'id', title: 'ID', width:80, sort: true, fixed: 'left'}
      ,{field: 'username', title: '用户名', width:80}
    ]]
  });
  
});

如上:
elem要写的是表格的id名(可以用class名但是不建议)
skin为表格风格,nob是无边框
url是接口 ,method则可以指定方法,默认是get,我这里用的post
request 可以指定默认参数的名字
layui的table自带两个默认参数,为page,limit用于分页,如果需要更改则要在request里修改
当要携带的参数不止page,limit的时候,这时候则要使用where:{ }
(一开始没看到官方文档的where,在request里踩了好久的坑)
where:{ name:'wj',id:'111' },可以任意添加除了page和limit以外的参数
这里详细讲一下response!!

,response: {
    statusName: 'status'
    ,status:null
    ,statusCode:null//规定成功的状态码,默认:0
    ,countName: 'total' //规定数据总数的字段名称,默认:count
    ,dataName: 'rows' //规定数据列表的字段名称,默认:data
}

在我实际操作的时候,接口调通的情况下表格一直提示,数据异常,status应该为200,当我改成status200的时候,status又提示应该为0,而当我改成0的时候,情况依然一直往复,拿不到数据,
当我检查的时候才发现,是后台返回的接口数据里根本没有判断成功的code这个字段!!!,所以,这时候把status改为null,就可以正常显示数据.


3.关于业务要求,需要用到的自定义模板进行表格改造

关于自定义模板,在表格这一块还是很好用的,但是就是写js比较麻烦,所用到的{{ }}出奇的多
所以建议先写好js,然后逐行添加{{ }}。{{d.name}},模板里的d指的是当前返回的数据的data,
data下的name,为d.name.
首先是在cols:{ }里的当前需要添加序号的表头写上属性 templet: '模板id名'
例如:templet: '#xuhao'
(1)添加首行序号

<script type="text/html" id="xuhao">
 {{d.LAY_TABLE_INDEX+1}}
</script>

如果是开启了分页,并且想要所有的数据都进行序号+1,则可以在col{ }表头里添加属性: type:'numbers' 则可以实现该效果。

(2)数据为空时不显示undefined,显示' 暂无数据'

效果如图:


<script type="text/html" id="std">
{{#
var fn = function(){
return '暂无数据';};
}}
{{# var xxx = d.name }}
{{#  if(xxx!=null){ }}
{{ d.name}}
{{#  } else { }}
{{ fn() }}
{{#  } }}
</script>

(3) 当前表格点击 查看 跳转到新页面并且携带相应数据
具体内容涉及项目,只展示一下点击跳转的模板,
可以通过onclick绑定事件
如图所示:


这是一条数据


<script type="text/html" id="sbxq">
   
    < a href='{{=d.GISID}}'>查看</ a>
 </script>

4.说一说table里最头疼的一个坑排序BUG!

数据排序异常问题
项目里需要使用排序,所以直接在cols{ }里的表头添加sort:true,即可开启排序。
对于排序规则,一般是从大到小,从小到大,
但是实际使用的过程中,出现了一个排序异常问题!!
b话少说,我先放图:


当我点击排序时,这个9.79出现在第二列。
倒序也是有这个问题。
遇到这个问题之后,第一反应是检查数据,发现console打印的数据是没问题的,
第二反应是去看官方文档,官方文档都是整数。也没有相关的问题和解决方法
我大胆的猜想是不是由于小数点的问题。这里可能涉及数据结构的问题。
于是我尝试着使用模板进行当前数据*100再用math取整。然后当我全是整数的时候
这行数据依然异常排序。
于是开始了漫长的百度之旅,然而并没有效果。
最后向后台沟通,这个数据尝试在后台进行*100再取整,最后我前端再/100(也可以让后端/100,但是我怕小数又出问题)。
大功告成。 

个人原创踩坑,转载需要注明出处噢。