zoukankan      html  css  js  c++  java
  • uniapp 微信小程序实现上拉分页

    在数据量较大时采用后端分页是常用的方法,与PC端不同的是,移动端分页往往不借助分页条,而是向上滑动触发对下一页的请求。在小程序里,向上滑动会触发onReachBottom事件,在该事件里发起对下一页的请求即可。

    首先在列表底部添加一个提示表现当前列表状态

    <div class="loading-text">
         ----{{loadingType === 0 ? contentText.contentdown : (loadingType === 1 ? contentText.contentrefresh : contentText.contentnomore)}}----
    </div>
    // 默认值为 0
    contentType: 0,
    
    contentText: {
        contentdown: "上拉显示更多",
        contentrefresh: "正在加载...",
        contentnomore: "没有更多数据了"
    }

    contentText 有三种状态,

    loadingType = 0 —— “上拉显示更多”

    loadingType = 1 —— “正在加载...”

    loadingType = 2 —— “没有更多数据了”

     样式:

    .loading-text {
        margin-top: 15rpx;
        text-align: center;
        font-size: 26rpx;
        color: #999;
    }

    准备工作就绪!

    首先在 onLoad 阶段请求列表数据

    apiGetListData(this.page, this.rows).then(res => {
        let list = res.value.list;
            // 返回的数据等于请求的最大条数,表示下一页可能还有数据
        if (list.length == this.rows) {
            this.loadingType = 0;
        } else {
            // 返回的数据小于请求的最大条数,表示下一页没有数据了
            this.loadingType = 2;
        }
        this.list = list;
    })

    其中 apiGetListData 是封装好的 Pormise 请求,需要的参数为当前页码(默认值是 1)以及每页数据条数(这里要注意设置的数据条数一定要能触底,不然永远触发不了onReachBottom事件)。

    接着当用户滑动列表,就要重新发起请求,page + 1,rows 不变,请求到的数据跟原始数据拼接。这时我们会发现与上面的请求有很多重复操作,因此可以改写一下封装个新方法。

    getListData() {
        apiGetListData(this.page, this.rows).then(res => {
            let list = res.value.list;
            // 返回的数据等于请求的最大条数,表示下一页可能还有数据
            if (list.length == this.rows) {
                this.loadingType = 0;
            } else {
                // 返回的数据小于请求的最大条数,表示下一页没有数据了
                this.loadingType = 2;
            }
            // 如果没有数据返回说明已经返回完了,记录状态,不用拼接
            if(!coupons.length) {
                this.hasNoMoreData = true;
                return;
            }
            // 跟原始数据拼接
            this.list = this.list.concat(list);
        })
    }
    onReachBottom() {
        // 如果没有数据了不再继续请求
        if (this.hasNoMoreData) return;
        this.page++
        // 显示“正在加载...”
        this.loadingType = 1;
        this.getListData();
    },

     至此,就完成了一个简单的小程序分页功能。

  • 相关阅读:
    什么是动态链接库
    <<TCP/IP高效编程>>读书笔记
    C++ 函数
    我的vim配置
    FastReport4.6程序员手册_翻译
    DUnit研究初步
    ADO BUG之'无法为更新定位行....' 解决之道
    极限编程的集成测试工具Dunit
    总结
    项目管理检查清单项目启动
  • 原文地址:https://www.cnblogs.com/zdd2017/p/14841238.html
Copyright © 2011-2022 走看看