layui实现数据表格及分页的方法

1. 概述

在网页开发中,表格是经常被用到的一种交互方式。数据表格能够将大量数据组织清晰,同时也可以通过分页的方式来提高数据展示的效率,使得页面加载更快。layui是一个比较流行的前端框架,它提供了一系列的UI组件,其中就包括了表格组件,使得开发者能够快速地实现数据表格、分页等功能。

2. layui表格组件基础用法

在layui中,表格组件的使用需要引入相应的模块(具体可以查看官方文档)。

2.1 表格的基本结构

layui表格组件的基本结构如下:

<table id="demo" lay-filter="test"></table>

id:用来唯一标识表格。在表格初始化时需要用到该参数,如下所示:

// 执行一个 table 实例

layui.table.render({

elem: '#demo'

});

lay-filter:用来作为表格的筛选器。一个表格存在多种操作的情况下,可以通过筛选器来区分不同的操作。

2.2 数据渲染

表格中的数据需要通过后端接口获取,通过前端js方法渲染到表格上。在layui表格中,需要设置一个url参数来获取数据,同时该url需要返回一个符合表格数据格式的数据。

表格数据格式如下:

{

"code": 0, //状态码,

"msg": "", //提示信息

"count": 1000, //数据总数

"data": [{ //具体数据

"id": "10001",

"username": "张三",

"sex": "男",

"city": "北京"

}]

}

其中,code、msg、count、data均需要按照此格式返回数据,count表示数据总数,data为具体数据(可以是json数组或json对象)。对于数据的获取,可以使用jquery的$.ajax()方法,如下所示:

$.ajax({

url: 'data.json',

method: 'GET',

dataType: 'json',

success: function(res) {

layui.table.render({

elem: '#demo',

data: res.data

});

}

});

通过以上代码,即可将数据渲染到表格上。

2.3 表头设置

表头是表格中非常重要的一个部分,它可以将数据进行某种分类,使得数据更加直观明了。在layui中,表头需要通过cols参数进行设置,如下所示:

layui.table.render({

elem: '#demo',

cols: [[ //表头

{field: 'id', title: 'ID', width: 80},

{field: 'username', title: '用户名', width: 120},

{field: 'sex', title: '性别', width: 80},

{field: 'city', title: '城市', width: 120},

{field: 'sign', title: '签名', width: 200},

{field: 'experience', title: '积分', width: 80},

{field: 'ip', title: 'IP', width: 120},

{field: 'logins', title: '登入次数', width: 100},

{field: 'joinTime', title: '加入时间', width: 120},

{fixed: 'right', title:'操作', toolbar: '#barDemo', width: 150}

]]

});

field:表示对应的数据字段名,值与数据中的字段名一致。

title:表示该列数据的名称。

width:设置该列数据的宽度。

fixed:表示该列是否固定,可选值:'left'、'right'、true(固定至左右两侧)。

toolbar:表示该列的工具条,可自定义添加操作按钮、事件等。

2.4 分页设置

layui表格组件提供了非常方便的分页功能,而该功能需要通过laypage模块进行实现。laypage的基本使用方法参考官方文档

在表格组件中,需要引入layui.form、layui.laypage两个模块,并分别对页码和每页显示数量进行设置,如下所示:

layui.use(['table', 'form', 'laypage'], function(){

var table = layui.table;

var form = layui.form;

var laypage = layui.laypage;

//执行一个 table 实例

table.render({

elem: '#demo',

url: '/demo/table/user/',

cols: [[ //表头

{field: 'id', title: 'ID', width: 80},

{field: 'username', title: '用户名', width: 120},

{field: 'sex', title: '性别', width: 80},

{field: 'city', title: '城市', width: 120},

{field: 'sign', title: '签名', width: 200},

{field: 'experience', title: '积分', width: 80},

{field: 'ip', title: 'IP', width: 120},

{field: 'logins', title: '登入次数', width: 100},

{field: 'joinTime', title: '加入时间', width: 120},

{fixed: 'right', title:'操作', toolbar: '#barDemo', width: 150}

]],

page: true //开启分页

});

//分页

laypage.render({

elem: 'pageDemo',

count: 50,

limit: 10,

layout: ['prev', 'page', 'next', 'count', 'skip'],

jump: function(obj){

console.log(obj)

}

});

});

page:表示是否开启分页功能,布尔类型。

elem:表示分页区域的DOM ID,如'pageDemo'。

count:表示数据总数。

limit:表示每页显示的数据量。

layout:表示分页的布局,可以自定义指定项,如['prev', 'page', 'next', 'count', 'skip']。

关于具体分页的实现,可参考laypage的官方文档。

3. layui表格进阶用法

在使用layui表格的基础用法后,我们可以通过一些进阶用法来进一步优化我们的表格。

3.1 数据排序

在表格中,数据的排序非常重要。layui表格组件提供了非常方便的排序功能。

通过在每列的表头中添加lay-sort属性即可实现数据的排序。对于带有lay-filter的表头,还可以实现单列多条件筛选。具体实现如下:

<table id="demo" lay-filter="test">

<thead>

<tr>

<th lay-filter="id" lay-sort>ID</th>

<th lay-filter="username" lay-sort>用户名</th>

<th lay-filter="sex" lay-sort>性别</th>

...

</tr>

</thead>

<tbody>

...

</tbody>

</table>

在上述示例中,设置lay-sort属性后,点击当前列的表头即可实现单列排序。对于筛选,可以在空数据框或者表头中添加lay-filter属性,添加筛选条件,如下所示:

<table id="demo" lay-filter="test">

<thead>

<tr>

<th lay-filter="id" lay-sort>ID</th>

<th lay-filter="username" lay-sort>用户名</th>

<th lay-filter="sex" lay-sort>性别</th>

<th lay-filter="xyz">筛选</th>

...

</tr>

</thead>

<tbody>

...

</tbody>

</table>

3.2 自定义操作列工具条

表格中经常需要自定义列,如操作列,而操作列中常常伴随着操作按钮等工具条。

在layui表格中,可以通过自定义工具条来实现跳转、编辑、删除等多种操作,具体实现方法如下:

layui.use(['table', 'layer'], function(){

var table = layui.table;

var layer = layui.layer;

//监听工具条

table.on('tool(test)', function(obj){

var data = obj.data; //获取当前行数据

var layEvent = obj.event; //获取当前点击的事件

var tr = obj.tr; //获取当前行 tr 的 DOM 对象

if(layEvent === 'detail'){ //查看

//do something

} else if(layEvent === 'del'){ //删除

layer.confirm('真的删除该数据么', function(index){

obj.del(); //删除对应行(tr)的DOM结构,并更新缓存

layer.close(index);

});

} else if(layEvent === 'edit'){ //编辑

//do something

//同步更新缓存对应的值

obj.update({

username: '123',

title: 'xxx'

});

}

});

});

在上述代码中,可以自定义操作列的工具条,添加对应的事件。其中,layEvent表示对应的事件名称,可以自定义,obj表示当前行的数据对象。

3.3 多级表头

对于一些非常复杂的表格,可能需要设置多级表头,以更好地展示数据。

layui表格也提供了对多级表头的支持,具体实现方法如下:

<table id="demo" lay-filter="test">

<thead>

<tr>

<th rowspan="2">ID</th>

<th rowspan="2">用户名</th>

<th colspan="2">联系信息</th>

<th colspan="4">用户积分</th>

<th rowspan="2">操作</th>

</tr>

<tr>

<th>邮箱</th>

<th>电话</th>

<th>文章</th>

<th>相册</th>

<th>留言</th>

<th>好友</th>

</tr>

</thead>

<tbody>

...

</tbody>

</table>

4. 总结

通过本文的学习,我们可以了解到layui表格组件的基本用法,包括:设置表格结构、数据渲染、表头设置、分页等基础功能,同时我们也可以通过进阶用法来使表格更加符合我们的需求,包括:数据排序、自定义操作列工具条、多级表头等功能。

总而言之,layui表格组件是非常方便易用的一款前端组件,它提供了非常丰富的实用功能,对于表格的展示和数据处理提供了非常便利的方式。