antd Table 上拉加载更多数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了antd Table 上拉加载更多数据相关的知识,希望对你有一定的参考价值。

参考技术A table不分页 然而数据又很多,所以数据需要做分页加载

查找antd 没找到上下拉加载对应的API

原来的实现方式:
在table外加一层div 监听table与div的位置变化来控制数据加载
但这样实现会在table滑动的时候 表头页滑上去了

支持同一页面内多个表格

以上为本人的开发笔记,如有问题或其他实现方式请留言交流。
谢谢!

mui上拉加载更多的使用

demo地址

我的另一博客原文链接
gitHub地址

mui框架中上拉加载的坑

1、在函数自己上拉加载行为后的回调函数
2、在mui封装的上拉加载中,点击某一项会失效。

解决方法

1、该函数是必须要写的,用来写自己的逻辑需求,但是一般情况下,需要设置显示为“加载更多”还是“没有更多数据了”。看了一些博客和官方文档,基本上都把这个设置放在了定时器中并在定时器中调用获取数据的方法(自己的业务需求)。
2、在mui封装的上拉加载中,点击某一项会失效。这个是真的很坑。就是采用事件监听的方式,阻止默认行为

示例代码

mui(‘选择器‘).on(‘tap‘,‘选择器‘,function(e){
     e.preventDefault();
    //自己的业务逻辑
})

一开始我将上述代码放在了mui.plusready()函数里面,可是事件并没有触发,所以,当我将它mui.plusready()中拿出来,事件就起作用了,我并不知道这是为什么,如果你偶尔看到这篇文章,可以告诉我一下。

demo代码

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0"/>
    <script>
        window.onload = function () {
            /*750代表设计师给的设计稿的宽度,你的设计稿是多少,就写多少;100代表换算比例,这里写100是
             为了以后好算,比如,你测量的一个宽度是100px,就可以写为1rem,以及1px=0.01rem等等*/
            getRem(750, 100)
        };
        window.onresize = function () {
            getRem(750, 100)
        };
        function getRem(pwidth, prem) {
            var html = document.getElementsByTagName("html")[0];
            var oWidth = document.body.clientWidth || document.documentElement.clientWidth;
            html.style.fontSize = oWidth / pwidth * prem + "px";
        }
    </script>
    <link rel="stylesheet" href="../css/mui.min.css"/>
    <link rel="stylesheet" href="../css/reset.css"/>
    <title>关于mui的上拉加载</title>
    <style>
        .mui-content {
            background: #fff;
        }

        h2 {
            font-size: 0.28rem;
            line-height: .6rem;
            padding-left: 10px;
        }

        .mui-scroll-wrapper {
            top: .75rem;
        }
    </style>
</head>
<body>
<div class="mui-content">
    <h2>上拉加载</h2>

    <div class="mui-scroll-wrapper" id="pullRefresh">
        <div class="mui-scroll">
            <ul class="mui-table-view" id="listContainer">
                <li class="mui-table-view-cell">
                    list1
                </li>
                <li class="mui-table-view-cell">
                    list2
                </li>
                <li class="mui-table-view-cell">
                    list3
                </li>
                <li class="mui-table-view-cell">
                    list4
                </li>
            </ul>
        </div>
    </div>
</div>

<script src="../js/jquery-2.1.3.min.js"></script>
<script src="../js/mui.min.js"></script>

<script>
    (function ($, doc) {
        var listContainer = doc.getElementById(‘listContainer‘);
        mui.init({
            pullRefresh: {
                container: ‘#pullRefresh‘,//待刷新区域标识,querySelector能定位的css选择器均可,比如:id、.class等
                up: {
                    height: 50,//可选.默认50.触发上拉加载拖动距离
                    auto: true,//可选,默认false.自动上拉加载一次
                    contentrefresh: "正在加载...",//可选,正在加载状态时,上拉加载控件上显示的标题内容
                    contentnomore: ‘没有更多数据了‘,//可选,请求完毕若没有更多数据时显示的提醒内容;
                    callback: pullfreshFunc //必选,刷新函数,根据具体业务来编写,比如通过ajax从服务器获取新数据;
                }
            }
        });
        var flag = true, counter = 1, pageSize = 10;

        function pullfreshFunc() {
            setTimeout(function () {
                mui(‘#pullRefresh‘).pullRefresh().endPullupToRefresh(flag);//参数为true代表没有更多数据了。
                getData();
            }, 500);

        }

        function getData() {
            mui.ajax({
                type: ‘get‘,
                url: ‘../json/data.json‘,
                data: {‘counter‘: counter},
                success: function (response) {
                    console.log(response);
                    let list = response.peopleList;

                    let html = "";
                    flag = !(list[0] == null || list[0] == "" || !list[0]);

                    if (flag) {
                        counter++;
                    }
                    for (let i = 0; i < list.length; i++) {
                        html += ‘<li class="mui-table-view-cell">‘ + list[i].name + ‘</li>‘;
                    }
                    jQuery(‘#listContainer‘).append(html)

                },
                error: function (error) {
                    console.log(error)
                }
            })
        }

        //点击单项事件
//        mui中上拉加载中的坑1:点击事件失效(不需要放在mui.plusReady()中)
        mui(‘#pullRefresh‘).on(‘tap‘, ‘li.mui-table-view-cell‘, function (e) {
            e.preventDefault();
            console.log(‘触发点击事件了‘)
        })
    }(mui, document))
</script>
</body>
</html>



以上是关于antd Table 上拉加载更多数据的主要内容,如果未能解决你的问题,请参考以下文章

mui 上拉加载更多的使用

mui上拉加载更多的使用

Android RecyclerView上拉加载更多item点击事件(显示获取的数据)

微信小程序上拉加载更多

FlutterListView 列表高级功能 ( ScrollController 上拉加载更多 )

iOS 下拉刷新和上拉加载更多效果原理