layui表格重载后界面闪动解决方案

layui框架默认提供的table模块,使用该模块可以快速高效的完成表格数据的开发。但是最近在使用过程中发现了一些小问题。下面一起来看下吧!

官方说明地址:https://www.layui.com/demo/table.html

需要实现的具体需求如下图:

在这里插入图片描述
上图中分为三个部分,我们要实现以下三个功能:
1.根据关键词搜索出想要的数据展示出来;
2.进入页面后加载默认数据;
3.通过分页控制数据的切换;

第一种方式:使用layui默认通用的方式实现

※ HTML代码

//搜索框

<form class="layui-form" action="">
     <div class="layui-input-block searchKeyword">
            <input type="text" name="title" value="" required lay-verify="required" placeholder="请输入搜索内容" autocomplete="off" class="layui-input keyWord">
      </div>
</form>
//表格
<table class="layui-hide" id="dateList" lay-filter="test"></table>

※ javascript代码

  • 刚进入页面加载数据
<script>
	layui.use(['layer', 'form', 'table', 'laypage'], function () {
    
    
		 var laypage = layui.laypage //分页
         var layer = layui.layer //弹层
         var table = layui.table //表格
         //首先加载默认数据
         table.render({
    
    
			elem: '#dateList',
			url: './api/GetCorpBasicInfoList', //数据接口
			title: '企业列表',
			data: [],
			page: true, //开启分页
			limit: 10, //每页默认显示的数量
			cols:[
				{
    
     field: 'CorpCode',title: '组织机构代码',width: '30%'},
				{
    
     field: 'CorpName',title: '企业名称',width: '40%'},
				{
    
     field: 'address',title: '企业注册地',width: '30%'}
			],//表头
			where:{
    
    
				keyWord:function keyWord(){
    
    
					return $(".keyWord").val()
				}
			},//传递参数 keyWord是获取页面中的关键词
			parseData:function(res){
    
    
				//请求成功后
				console.log(res)
			},
			text:{
    
    
				  none: '暂无相关数据' //默认:无数据。
			},
			done:function(res,curr,count){
    
    
				//table渲染完成后 res渲染数据,curr当前页,count总条数
			}
		})
		
	})
</script>

以上代码就实现了刚进入页面后数据的加载。分页也是可以用的。如果数据没有加载出来可能是数据格式不正确,正确的数据格式应该如下:


{
    
    
    "Success": true,
    "MsgID": 1000,
    "Count": 191236,//总条数需要在每次请求的时候返回
    "data": [
        {
    
    
            "CorpCode": "xxx-9",
            "CorpName": "xxx",
            "AddRess": "xxx",
        },
        {
    
    
            "CorpCode": "xxx-3",
            "CorpName": "xxx",
            "AddRess": "xxx",
        }
    ],
    "code": 0
}
//1.最重要的是data和count。要想在layui中展示出数据,并且自动计算出分页这两个参数是必须的。
//2.如果后台的数据参数名必须使用固定的无法改变,那么需要在获取数据成功后在parseData方法中处理下。
/*parseData:function(res){
	//比如:后台没有返回count字段返回了Count。需要手动追加一个给对象中。
	res.count=res.Count
},*/
  • 实现关键词搜索数据展现
  //注意:在layui.use方法里增加以下代码。
   var active = {
    
    
       reload:function(){
    
    
           var keyWord = $(".keyWord");
           var index = layer.msg('查询中,请稍等...'{
    
    icon:16,time:false,shade:0});
               setTimeout(function(){
    
    
                  table.reload('dateList',{
    
    
                       page:{
    
    curr:1},
                       where:{
    
    
                           keyword:keyWord.val()
                        }  
                    })
                    layer.close(index)
                },500)
            }
     }
 //监听搜索按钮。我这里由于页面上没有写点击按钮所以用Entry(回车)代替
    $('.keyWord').keydown(function (event) {
    
    
            var e = event || window.event;
            if (e && e.keyCode == 13) {
    
    
               active.reload()//执行重载方法
            }
    }) 
  

通过以上代码就可以实现我们的需求。但是如果你仔细点会发现在通过关键词搜索的时候页面会闪动一下,降低了体验度。下边我们使用另外一种方式进行编写:

思路:利用ajax获取数据改变表格中的数据,不对表格进行重载。

※ HTML

<form class="layui-form" action="">
     <div class="layui-input-block searchKeyword">
            <input type="text" name="title" value="" required lay-verify="required" placeholder="请输入搜索内容" autocomplete="off" class="layui-input keyWord">
      </div>
</form>
//表格
<table class="layui-hide" id="dateList" lay-filter="test"></table>
//新增page
<div id="page"></div>

※ javascript

<script>
layui.use(['layer', 'form', 'table', 'laypage'], function () {
    
    
		 var laypage = layui.laypage //分页
         var layer = layui.layer //弹层
         var table = layui.table //表格
         // 请求数据接口
        function dataList(page, limit, type) {
    
    
            var index = layer.msg('查询中,请稍等...',{
    
    icon:16,time:false,shade:0});
            $.ajax({
    
    
                url: './api/GetCorpBasicInfoList',
                method: 'get',
                data: {
    
    
                    page: page, // 页码数
                    limit: limit, // 每页条数
                    keyWord:$(".keyWord").val(),
                },
                success: function (res) {
    
    
                    if (type == 1) {
    
    
                        //type=1首次调用方法后,加载分页。否则不加载分页
                        pageLoad(res.Count)
                    } 
                    tableData(res.data)
                    layer.close(index)
                }
            })
        }
        //刚进入页面后首次加载数据
        dataList(1, 10, 1)
        // 计算并渲染分页
        function pageLoad(data) {
    
    
            laypage.render({
    
    
                elem: 'page', //注意,这里的 page 是 ID,不用加 # 号
                count: data, //数据总数,从服务端得到
                limit: 10, // 每页条数
                layout: ['prev', 'page', 'next','limit', 'skip'],
                jump: function (obj, first) {
    
    
                    if (!first) {
    
    
                        dataList(obj.curr, obj.limit) // 分页点击传参 
                    }
                }
            });
        }
        //渲染表格数据
        function tableData(data) {
    
    
            table.render({
    
    
                elem: '#dateList',
                cols: [
                    [{
    
    
                        field: 'CorpCode',
                        title: '组织机构代码',
                        width: '30%',
                    }, {
    
    
                        field: 'CorpName',
                        title: '企业名称',
                        width: '40%'
                    }, {
    
    
                        field: 'address',
                        title: '企业注册地',
                        width: '30%'
                    }]
                ],
                limit:data.length,//注意这个limit不要写死。这个需要根据data的数量进行改变,否则改变了每页显示的数量后不管用。
                data: data
            })
        }
        //监听关键词搜索
        $('.keyWord').keydown(function (event) {
    
    
            var e = event || window.event;
            if (e && e.keyCode == 13) {
    
    
                dataList(1, 10, 1)
            }
        })
 })
</script>

以上代码就是layui表格数据渲染以及解决重载后闪动的问题。希望对大家有帮助,如果有什么疑问请留言相互讨论…。

Guess you like

Origin blog.csdn.net/qq_36229632/article/details/105141468