layui table 方法渲染 筛选重载和搜索重载实现

公司产品选用的技术栈包含了layui传送门,这是一个简洁大方地前端ui框架,上手简单,开源,长期维护,并且有社区FLY

layui有许多问题,但是能被解决的问题都不算问题,只不过需要你仔细看文档,经常逛社区。

这里给大家介绍它的table模块,因为我在使用中遇到了许多问题,这里做汇总。

1、表格方法渲染(使用内置的ajax)
table模块最实用的功能就是避免我们ajax通信后还要依据解析数据手动生成并添加元素,简单来说,你只需要:

<form class="layui-form"  action="">
<div class="form-select">
    <select class="selectName" lay-filter="selectName">
        <option value="0">所有用户</option>
        <option value="1">VIP用户</option>
        <option value="2">普通用户</option>
    </select>
</div>
<div class="form-search">
    <input type="text" placeholder="按用户名搜索" class="searchName">
    <i class="searchBtn iconfont icon-fangdajing" alt=""></i>
</div>
<table id="user-table" class="layui-hide" lay-filter="user"></table>
<script type="text/html" id="table-bar">
       <a lay-event="del">删除</a>|
       <a lay-event="gotoPage">查看详情</a>
</script>
</form>
<script>
			var userTable
			var options = {
            	elem: '#user-table',
            	headers: {
               		 'Authorization':token  //通信中的token传递
            	},
            	page:true,//默认开启分页
            	request:{
                	'limitName':'pageSize' //分页每页条数默认字段改为pageSize
            	},
           	 	url:  '/get_user_list',
            	cols: [[  // 表格的表头
	                {field:'username', title: '用户名'}
	                ,{field:'nickname', title: '昵称', sort: true}
	                ,{field:'login_time', title: '最近登录时间',sort:true}  //开启排序
	                ,{field:'login_ip', title: '最近登录IP', }
	                ,{field:'log', title: '登录操作日志', sort: true}
	                ,{field:'right', title: '操作', toolbar:"#table-bar"}
	            ]],
            	parseData:function(res){
                	//这个函数非常实用,是2.4.0版本新增的,当后端返回的数据格式不符合layuitable需要的格式,用这个函数对返回的数据做处理,在2.4.0版本之前,只能通过修改table源码来解决这个问题
                	return {
                    	code:res.status=='success'?0:1,
                    	msg:res.status,
                    	count:count, //总页数,用于分页
                    	data:res.data.userList
                	}
           		}
        	}
			layui.use('table',function(){
				var lTable = layui.table;
				userTable = lTable.render(options)  //获取数据并渲染
			})
</script>

2、表格中的事件
继续上面的代码

			layui.use('table',function(){
				var lTable = layui.table;
					userTable = lTable.render(options) 
				table.on('tool(user)',function(obj){
		            console.log(obj) //你会看到obj包含了你所需要的所有数据
		            if(obj.event == 'del'){
		                layer.confirm('您确定要删除该用户:' + obj.data.username + '吗?', {
		                    title:'删除用户',
		                    btn: ['确定','取消']
		                }, function(index){
		                	ajax().then(function(){
		                		layer.close(index)
		                		userTable.reload({
	                                page:{
	                                    curr:1   //表格重载的时候将查询页数设为第一页
	                                }
	                            })
		                	}) 
		                })
		            }else if(obj.event == 'gotoPage'){
						location.href = '/userDeatil.html?userid=' + obj.data.id
					}
		        })
			})

3、表格中的搜索

    $(document)
    	.on('click','.searchBtn',function () {
	        userTable.reload({
	            where:{
					search_arg:$('.searchName').val().trim()
	            },
	            page:{
		            curr:1
		        }
	        })
	    });
		.keyup(function(event){
	        if(event.keyCode == 13)
	        	event.preventDefault()
	            $(".searchBtn").trigger("click");
	    });

4、下拉筛选

layui.use('form',function(){
		var form = layui.form
		form.on('select(selectName)', function(data) 
            userTable.reload({
                where:{
                    role:data.value,
                    search_arg:$('#searchName').val().trim()
                },
	            page:{
		            curr:1
		        }
            })
        })
})

好了,带有筛选和搜索的列表就做完了

需要注意的问题有一个,就是每次筛选和搜索的时候,都要将当前页设置为1,即从第一页开始搜索,因为table中有一个table.config.page.curr是全局维护的变量,在每一次table重载的时候,是默认把这个变量当做当前页传递给后台的,这将导致不可预测的错误或者返回的结果不是基于第一页的

你也可以对这个变量动态赋值:

var curr = userTable.config.page.curr
if(curr != 1) curr = 1

想要将搜索和筛选做联动,只需要在每次表格重载的时候将 rolesearch_arg都传递到where里就可以了,其他问题欢迎留言

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值