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表格组件是非常方便易用的一款前端组件,它提供了非常丰富的实用功能,对于表格的展示和数据处理提供了非常便利的方式。