美文网首页
上拉触底分页&下拉刷新(微信小程序学习day19)

上拉触底分页&下拉刷新(微信小程序学习day19)

作者: 扶得一人醉如苏沐晨 | 来源:发表于2023-12-11 15:23 被阅读0次

一、上拉触底

Page({
    /**
     * 页面的初始数据
     */
    data: {
        list: [],
        page: 1,
        pageSize: 10,
        total: 0,
        // 加载锁--开始请求数据设置为true,请求结束设置为false,触底事件判断为true则return
        isLoading: false
    },
    getList() {
        // 设置加载锁为true
        this.setData({
            isLoading: true
        })
        // 展示loading效果
        wx.showLoading({
            title: '数据加载中...',
        })
        wx.request({
            url: `https://www.escook.cn/categories/1/shops`,
            method: 'GET',
            data: {
                _page: this.data.page,
                _limit: this.data.pageSize
            },
            success: (res) => {
                this.setData({
                    list: [...this.data.list, ...res.data.list],
                    total: res.data.total
                })
            },
            complete: () => {
                // 关闭加载提示
                wx.hideLoading()
                // 关闭加载锁
                this.setData({
                    isLoading: false
                })
            }
        })
    },
    /**
     * 生命周期函数--监听页面加载
     */
    onLoad(options) {
        this.getList()
    },
    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom() {
        if (this.data.pageSize * this.data.page >= this.data.total) {
            wx.showToast({
                title: '暂无更多数据',
            })
            return
        }
        // 数据加载中--直接return
        if (this.data.isLoading) return
        this.setData({
            page: this.data.page + 1
        })
        this.getList()
    },
})

二、下拉刷新

    1. .json文件中为此page页面开启下拉刷新功能
{
    "usingComponents": {},
    "navigationBarTitleText": "商品列表",
    "enablePullDownRefresh": true
}
    1. 页面相关事件处理函数--监听用户下拉动作

在调用getList方法的时候传入了一个箭头函数,执行wx.stopPullDownRefresh()用于关闭下拉刷新(默认不自动关闭)

/**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh() {
        // 需要重置关键的数据
        this.setData({
            page: 1,
            list: [],
            total: 0
        })
        // 从新请求数据,传入回调,关闭下拉刷新加载
        this.getList(() => {
            wx.stopPullDownRefresh()
        })
    },
    1. getList方法中处理回调函数cb && cb()
getList(cb) {
        this.setData({
            isLoading: true
        })
        // 展示loading效果
        wx.showLoading({
            title: '数据加载中...',
        })
        wx.request({
            url: `https://www.escook.cn/categories/1/shops`,
            method: 'GET',
            data: {
                _page: this.data.page,
                _limit: this.data.pageSize
            },
            success: (res) => {
                this.setData({
                    list: [...this.data.list, ...res.data.list],
                    total: res.data.total
                })
            },
            complete: () => {
                // 关闭加载提示
                wx.hideLoading()
                // 关闭节流锁
                this.setData({
                    isLoading: false
                })
                // 如果是下拉刷新,则执行回调函数关闭下拉刷新
                cb && cb()
            }
        })
    },

三、完整代码

// pages/pickFriend/pickFriend.js
Page({
    /**
     * 页面的初始数据
     */
    data: {
        list: [],
        page: 1,
        pageSize: 10,
        total: 0,
        // 加载锁--开始请求数据设置为true,请求结束设置为false,触底事件判断为true则return
        isLoading: false
    },
    getList(cb) {
        this.setData({
            isLoading: true
        })
        // 展示loading效果
        wx.showLoading({
            title: '数据加载中...',
        })
        wx.request({
            url: `https://www.escook.cn/categories/1/shops`,
            method: 'GET',
            data: {
                _page: this.data.page,
                _limit: this.data.pageSize
            },
            success: (res) => {
                this.setData({
                    list: [...this.data.list, ...res.data.list],
                    total: res.data.total
                })
            },
            complete: () => {
                // 关闭加载提示
                wx.hideLoading()
                // 关闭节流锁
                this.setData({
                    isLoading: false
                })
                // 如果是下拉刷新,则执行回调函数关闭下拉刷新
                cb && cb()
            }
        })
    },
    /**
     * 生命周期函数--监听页面加载
     */
    onLoad(options) {
        this.getList()
    },
    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh() {
        // 需要重置关键的数据
        this.setData({
            page: 1,
            list: [],
            total: 0
        })
        // 从新请求数据,传入回调,关闭下拉刷新加载
        this.getList(() => {
            wx.stopPullDownRefresh()
        })
    },
    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom() {
        if (this.data.pageSize * this.data.page >= this.data.total) {
            wx.showToast({
                title: '暂无更多数据',
                icon: 'none'
            })
            return
        }
        if (this.data.isLoading) return
        this.setData({
            page: this.data.page + 1
        })
        this.getList()
    },
})

相关文章

网友评论

      本文标题:上拉触底分页&下拉刷新(微信小程序学习day19)

      本文链接:https://www.haomeiwen.com/subject/vrkvwdtx.html