视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
layui中的table模块中的基础参数应用
2020-11-03 23:10:08 责编:小采
文档


layui 的 table模块是一个重头,在基础参数方面尽可能地做到友好,即:保证功能的前提而又避免过于繁杂的配置。

基础参数一般出现在以下几种场景中:

场景一:下述 lay-data 里面的内容即为基础参数项,切记:值要用单引号

<table lay-data="{height:300, url:'/api/data'}" lay-filter="demo"> …… </table>

场景二:下述方法中的键值即为基础参数项

table.render({
 height: 300
 ,url: '/api/data'
});

更多场景:下述options即为含有基础参数项的对象

> table.init('filter', options); //转化静态表格
> var tableObj = table.render({});
 tableObj.reload(options); //重载表格

接下来看一下基础元素有哪些?

1、elem - 绑定元素是指定原始table容器,只适用于 table.render()的渲染方式

HTML:
<table id="test"></table> 
 
JS:
table.render({ //其它参数在此省略
 elem: '#test' //或 elem: document.getElementById('test') 等
});

2、设置表头,这里包含很多值,是一个二维数组。如果你采用表格的“方法级渲染”,那么你需要借助该参数来设定表格。如:

JS:
table.render({
 cols: [[ //标题栏
 {checkbox: true}
 ,{field: 'id', title: 'ID', width: 80}
 ,{field: 'username', title: '用户名', width: 120}
 ]]
});
 
它等价于:
<table class="layui-table" lay-data="{基础参数}" lay-filter="test">
 <thead>
 <tr>
 <th lay-data="{checkbox:true}"></th>
 <th lay-data="{field:'id', width:80}">ID</th>
 <th lay-data="{field:'username', width:180}">用户名</th>
 </tr>
 </thead>
</table>

下面是一个二级表头的例子:

JS:
table.render({
 cols: [[ //标题栏
 {field: 'username', title: '联系人', width: 80, rowspan: 2} //rowspan即纵向跨越的单元格数
 ,{field: 'amount', title: '金额', width: 80, rowspan: 2}
 ,{align: 'center', title: '地址', colspan: 3} //colspan即横跨的单元格数,这种情况下不用设置field和width
 ], [
 {field: 'province', title: '省', width: 80}
 ,{field: 'city', title: '市', width: 120}
 ,{field: 'county', title: '详细', width: 300}
 ]]
});
 
它等价于:
<table class="layui-table" lay-data="{基础参数}">
 <thead>
 <tr>
 <th lay-data="{field:'username', width:80}" rowspan="2">联系人</th>
 <th lay-data="{field:'amount', width:120}" rowspan="2">金额</th>
 <th lay-data="{align:'center'}" colspan="3">地址</th>
 </tr>
 <tr>
 <th lay-data="{field:'province', width:80}">省</th>
 <th lay-data="{field:'city', width:120}">市</th>
 <th lay-data="{field:'county', width:300}">详细</th>
 </tr>
 </thead>
</table>

需要说明的是,table模块支持无限极表头,你可按照上述的方式继续扩充。核心点在于 rowspan 和 colspan 两个参数的

接下来就是表头里的一些参数设置

<1> field:设定字段名

table.render({
 cols: [[
 {field: 'id'} //其它参数在此省略
 ,{field: 'username'}
 ]]
});
 
等价于:
<th lay-data="{field:'id'}"></th>
<th lay-data="{field:'username'}"></th>

<2> title:设定标题名称

table.render({
 cols: [[
 {title: '邮箱'} //其它参数在此省略
 ,{title: '签名'}
 ]]
});
 
等价于:
<th lay-data="{}">邮箱</th> (PS:也可以把标题写在lay-data里面,即 title:'邮箱')
<th lay-data="{}">签名</th>

<3> width:设定列宽。列宽的设定也通常是必须的(“特殊列”除外,如:复选框列、工具列等),它关系到表格的整体美观程度。

table.render({
 cols: [[
 {width: 80} //其它参数在此省略
 ,{width: 120}
 ]]
});
 
等价于:
<th lay-data="{width:80}"></th>
<th lay-data="{width:120}"></th>

<4> checkbox:设定复选框。如果设置 true,则表示该列内容为复选框,通常它被放在第一列。

table.render({
 cols: [[
 {checkbox: true} //其它参数在此省略
 ,{field: 'id', title:'ID', width: 100}
 ]]
});
 
等价于:
<th lay-data="{checkbox:true}"></th>
<th lay-data="{field:'id', width:100}">ID</th>

还有需要注意的是,这里的LAY_CHECKED是和checkbox搭配使用的,如果设置 true,则表示复选框默认全部选中。

table.render({
 cols: [[
 {checkbox: true, LAY_CHECKED: true} //其它参数在此省略
 ,{field: 'id', title:'ID', width: 100}
 ]]
});
 
等价于:
<th lay-data="{checkbox:true, LAY_CHECKED: true}"></th>
<th lay-data="{field:'id', width:100}">ID</th>

<5> space:设定空隙列。如果设置 true,则定义一个 15px 宽度无任何内容的列。

table.render({
 cols: [[ //其它参数在此省略
 {space: true}
 ,{field: 'id', title:'ID', width: 100}
 ]]
});
 
等价于:
<th lay-data="{space:true}"></th>
<th lay-data="{field:'id', width:100}">ID</th>

<6> sort:是否需要排序。如果设置 true,则在对应的表头显示排序icon,从而对列开启排序功能。

注意:不推荐对值存在:数字和普通字符的列开启排序,因为会进入字典序比对。比如:'贤心' > '2' > '100',这可能并不是你想要的结果,但字典序排列算法(ASCII码比对)就是这样的,具体你也可以去了解一下字典序方面的知识。

table.render({
 cols: [[
 {sort:true} //其它参数在此省略
 ,{field:'id', title:'ID', width:100}
 ]]
});
 
等价于:
<th lay-data="{sort:true}"></th>
<th lay-data="{field:'id', width:100}">ID</th>

<7> fixed:是否需要固定列。如果设置 true 或 'right',则对应的列将会被固定在左或右,不随滚动条而滚动。

table.render({
 cols: [[
 {fixed:true} //其它参数在此省略
 ,{field:'id', title:'ID', width:100}
 ,{field:'username', title:'姓名', width:120, fixed:'right'} //固定列在右
 ]]
});
 
等价于:
<th lay-data="{sort:true}"></th>
<th lay-data="{field:'id', width:100}">ID</th>
<th lay-data="{field:'username', width:120, fixed:'right'}">姓名</th>

<8> edit:是否允许编辑。如果设置 true,则对应列的单元格将会被允许编辑,目前只支持type="text"的input编辑。

table.render({
 cols: [[
 {edit:'text'} //其它参数在此省略
 ,{field:'id', title:'ID', width:100}
 ]]
});
 
等价于:
<th lay-data="{edit:'text'}"></th>
<th lay-data="{field:'id', width:100}">ID</th>

<9> templet:自定义模版。在默认情况下,单元格的内容是完全按照数据接口返回的content原样输出的,如果你想对某列的单元格添加链接等其它元素,你可以借助该参数来轻松实现。这是一个非常实用的功能,你的表格内容会因此而丰富多样。

table.render({
 cols: [[
 {field:'title', title: '文章标题', width: 200, templet: '#titleTpl'} //这里的templet值是模板元素的选择器
 ,{field:'id', title:'ID', width:100}
 ]]
});
 
等价于:
<th lay-data="{field:'title', width: 200, templet: '#titleTpl'}">文章标题</th>
<th lay-data="{field:'id', width:100}">ID</th>

事实上,templet也可以直接是一段html内容,如:

templet: '<div><a href="/detail/{{d.id}}" class="layui-table-link">{{d.title}}</a></div>' 
注意:这里一定要被一层 <div></div> 包裹,否则无法读取到模板

<10> toolbar:绑定工具条。通常你需要在表格的每一行加上 查看、编辑、删除 这样类似的操作按钮,而 tool 参数就是为此而生,你因此可以非常便捷地实现各种操作功能。

tool 参数和 templet 参数的使用方式完全类似,通常接受的是一个选择器,也可以是一段HTML字符。

table.render({
 cols: [[
 {field:'id', title:'ID', width:100}
 ,{fixed: 'right', width:150, align:'center', toolbar: '#barDemo'} //这里的toolbar值是模板元素的选择器
 ]]
});
 
等价于:
<th lay-data="{field:'id', width:100}">ID</th>
<th lay-data="{fixed: 'right', width:150, align:'center', toolbar: '#barDemo'}"></th>

下述是 toolbar 对应的模板,它可以存放在页面的任意位置:

<script type="text/html" id="barDemo">
 <a class="layui-btn layui-btn-mini" lay-event="detail">查看</a>
 <a class="layui-btn layui-btn-mini" lay-event="edit">编辑</a>
 <a class="layui-btn layui-btn-danger layui-btn-mini" lay-event="del">删除</a>
 
 <!-- 这里同样支持 laytpl 语法,如: -->
 {{# if(d.auth > 2){ }}
 <a class="layui-btn layui-btn-mini" lay-event="check">审核</a>
 {{# } }}
</script>
 
注意:属性 lay-event="" 是模板的关键所在,值可随意定义。

接下来我们借助table模块的工具条事件,完成不同的操作功能:

//监听工具条
table.on('tool(test)', function(obj){ //注:tool是工具条事件名,test是table原始容器的属性 lay-filter="对应的值"
 var data = obj.data; //获得当前行数据
 var layEvent = obj.event; //获得 lay-event 对应的值
 var tr = obj.tr; //获得当前行 tr 的DOM对象
 
 if(layEvent === 'detail'){ //查看
 //do somehing
 } 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'
 });
 }
});

更多layui相关知识请关注layui框架。

下载本文
显示全文
专题