layui-数据表格的使用

layui.table组件用于快速开发前端表格显示,通过HTTPGET接口获取数据并按特定格式渲染。它支持动态加载和静态数据展示,数据格式要求包含code、msg、count和data字段。parseData函数用于转换非标准格式的数据,而table.reloadData和table.reload分别用于轻度和深度重载表格数据。

表格数据分动态和静态的
layui提供了个layui.table模块组件,可以快速开发表格数据显示

  1. html前端调用<table id="user-table" lay-filter="user-table"></table>table标签
  2. scrip引用layui库<script src="../../component/layui/layui.js"></script>
  3. JavaScript执行操作,所有layui库的操作都在layui.use(['table', 'form', 'jquery','common'], function() {}中执行
  4. 调用table.render,执行生命周期:执行table.render->调用before函数->http执行成功则先调用parseData函数->表格数据加载渲染完成调用done函数

通过http GET接口获取表格显示数据

table.render({
	elem: '#user-table',
	url: 'http://aaaa.cn/test',
	method: 'get',
	where:{
		uart_len:0,
		device_id:'000000000'
	},
	page: true,
	limit: 10,
	data:[],
	scrollPos:'fixed',
	cols: cols,
	skin: 'row',
	editTrigger: 'dblclick',
	// lineStyle: 'height: 30px;',
	toolbar: '#user-toolbar',
	defaultToolbar: [{
		title: '刷新',
		layEvent: 'refresh',
		icon: 'layui-icon-refresh',
	}, 'filter', 'print', 'exports'],
	parseData: function(res){ //res 即为原始返回的数据

		return tableUpdateParams;
	},
	before: function(res, curr, count) {
	},
	done: function(res, curr, count) {

	}
});
字段说明
  1. where
    GET请求参数,以上请求链接等价于http://aaaa.cn/test?uart_len=0&device_id:000000000,直接链接的方式的时候,参数值都是字符串类型,而且不需要加双引号的
  2. data:字段类型,列表,功能详单于parseData说明中的数据格式的data,加载静态显示数据,和http操作二选一
函数说明
  1. parseData
    由于layui.table的数据格式是固定的,如下
{
	code: 0
	,msg: ''
	,count: 0
	,data: [{
			device_id : ''
		}]
}

data字段类型为列表,列表中每个对象为每行的显示数据。
如果GET请求回来的数据不是按照这个格式返回的需要经过转换才能正常加载显示数据,parseData函数就是用来做中间数据格式转换的,轻度重载不会改变任何参数,深度重载只改变table.reload时填写的参数,其他参数保持调用table.render时的值。

重载表格显示数据

重载分两种,不管调用哪种方式都是按照执行生命周期来执行,

轻度重载

只重载显示数据

table.reloadData('user-table', {});
深度重载

重载所有参数,包括urlwhere等参数,true表示打开深度重载

table.reload('user-table',{
	where:{
		uart_len:1,
		device_id:'000000000',
		max_id:1
	}}
, true);
```
```html <script type="text/html" id="toolbarDemo"> <div class="layui-btn-container"> <button class="layui-btn layui-btn-sm" lay-event="getCheckData">获取选中行数据</button> <button class="layui-btn layui-btn-sm" lay-event="getData">获取当前页数据</button> <button class="layui-btn layui-btn-sm" id="dropdownButton"> 下拉按钮 <i class="layui-icon layui-icon-down layui-font-12"></i> </button> <button class="layui-btn layui-btn-sm layui-bg-blue" id="reloadTest"> 重载测试 <i class="layui-icon layui-icon-down layui-font-12"></i> </button> <button class="layui-btn layui-btn-sm layui-btn-primary" id="rowMode"> <span>{{= d.lineStyle ? '多行' : '单行' }}模式</span> <i class="layui-icon layui-icon-down layui-font-12"></i> </button> </div> </script> ``` --- ### ✅ 这段代码是干什么的? 这是 **Layui 表格的自定义工具栏模板(Toolbar Template)**,用于在表格上方或内部添加一组操作按钮。它本身不会直接显示,而是通过 Layui 的 `toolbar` 配置项被动态渲染到表格容器中。 --- ### 🔍 详细解释 #### 1. `<script type="text/html" id="toolbarDemo">` - 这不是普通的 JavaScript 脚本,而是一个 **HTML 模板片段**。 - `type="text/html"` 告诉浏览器:这段内容不要执行,只是当作 HTML 模板使用- `id="toolbarDemo"` 是这个模板的唯一标识,后面 JS 中会通过这个 ID 引用它。 > 类似于 Vue 的 `<template>` 或 Mustache 的模板语法。 --- #### 2. 工具栏中的各个按钮说明 | 按钮 | 功能说明 | |------|--------| | `lay-event="getCheckData"` | 点击后触发事件,JS 中可通过 `table.on('toolbar(...)` 监听,实现“获取选中行”逻辑 | | `lay-event="getData"` | 同上,用于获取当前页所有数据 | | `id="dropdownButton"` | 绑定下拉菜单行为(需额外 JS 实现),图标 `<i class="layui-icon ...">` 显示向下的箭头 | | `id="reloadTest"` | 可用于重新加载表格数据(如调用 `table.reload()`) | | `id="rowMode"` | 显示“单行/多行”切换,使用了 `{{= d.lineStyle ? '多行' : '单行'}}` —— 这是 Layui 的模板表达式,支持动态渲染文本 | > 注意:`{{= ... }}` 是 Layui 内置模板引擎的写法,等价于输出变量值。 --- #### 3. 如何使用这个工具栏? 你需要在 `table.render()` 中引用它: ```js layui.use(['table'], function(){ var table = layui.table; // 渲染表格 table.render({ elem: '#test', url: '/api/data', toolbar: '#toolbarDemo', // 关键:引用上面的 script 模板 defaultToolbar: [], // 可选:关闭默认导出等功能 cols: [[ {type: 'checkbox'}, // 配合 getCheckData 使用 {field:'id', title:'ID'}, {field:'name', title:'姓名'} ]], page: true }); // 监听工具栏按钮事件 table.on('toolbar(test)', function(obj){ var checkStatus = table.checkStatus(obj.config.id); switch(obj.event){ case 'getCheckData': var data = checkStatus.data; layer.alert(JSON.stringify(data)); break; case 'getData': var data = table.cache[obj.config.id]; layer.alert(JSON.stringify(data)); break; } }); // 绑定其他按钮点击(比如 #reloadTest) document.getElementById('reloadTest').onclick = function(){ table.reload('test', { page: { curr: 1 } }); }; // 切换行模式示例 document.getElementById('rowMode').onclick = function(){ // 示例逻辑:切换 lineStyle 状态并刷新按钮文字 d.lineStyle = !d.lineStyle; // 注意:此处 d 不在此作用域,实际应维护一个状态变量 // 此处应重新渲染按钮或用 DOM 操作更新文本 }; }); ``` --- ### 🧩 小技巧:为什么用 `script` 标签写 HTML? - 防止浏览器立即解析和渲染这些按钮(避免页面一开始就显示出来)。 - 提供一种轻量级模板机制,便于动态插入到指定位置。 - 兼容性好,无需引入额外模板库。 --- ### ⚠️ 注意事项 - `{{= d.lineStyle }}` 中的 `d` 通常是来自某个数据上下文(比如表头、行数据),但在工具栏中可能没有 `d` 对象!所以这句可能会报错。 - 如果你看到 `d.lineStyle`,通常意味着它是从某个高级定制场景传入的(例如结合 `header` 自定义或外部状态管理)。若未定义 `d`,建议改为用 JS 控制按钮文本。 ✅ 更安全的写法(推荐): ```html <span class="mode-text">单行模式</span> ``` 然后用 JS 修改文本: ```js var modeBtn = document.getElementById('rowMode'); var isMulti = false; modeBtn.onclick = function(){ isMulti = !isMulti; var textEl = this.querySelector('.mode-text'); textEl.innerHTML = isMulti ? '多行模式' : '单行模式'; }; ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值