1. 功能:
下拉刷新,小程序分页(商品列表,视频列表…)常用!!
2. 思路:
- 在 data 中定义 page(页码),pageSize(每页个数),isEnd(标记是否加载完)
- 分页函数,请求新数据,追加到老数据(concat)
- 何时追加? 何时停止追加?
- 有新数据,追加;没有新数据,停止追加,且标记 isEnd = true (加载完)
- 小程序 onReachBottom() {} /** 页面上拉触底事件的处理函数 */
- 判断 isEnd,是否加载完全;没有加载完,++page,调用分页函数,反之无需操作
3. 实现:
data: {
lists: [], // 要循环的数据列表
page: 0, // 初始页码
pagesize: 10, // 每页十条数据,可根据实际修改
isEnd: false, // 是否加载完毕
},
onLoad(options) {
this.loadLists() // 加载数据
},
loadLists(){
httpGet('/api/list',{
page: this.data.page,
pagesize: this.data.pagesize
}).then(res => {
let reqList = res.data // 新数据
let oldList = this.data.videos // 旧数据
// 新数据长度为 0 的时候便是最后一页
if (reqList.length === 0) {
wx.showToast({
title: '没有更多数据了',
icon: 'none',
duration: 2000
})
this.setData({
isEnd: true // 所有数据加载完毕
})
return
}
// 赋值
this.setData({
lists: oldList.concat(reqList) // 新数据拼接到旧数据
})
})
},
/** 页面上拉触底事件的处理函数 */
onReachBottom() {
console.log('===触底了!!===');
let page = this.data.page
// 数据是否全部加载完毕
if (!this.data.isEnd) {
this.setData({
page: ++page
})
setTimeout(()=>{
this.loadLists() // 加载新数据
}, 500)
}
},
4. 注意点:
若页面内有 tab 切换,同一数据列表,切换时需清空须 重置页码,重置列表数据!!!
本文详细介绍了在小程序中实现下拉刷新和分页加载的功能。通过定义页码、每页数量和加载状态变量,结合onReachBottom事件监听页面上拉触底,动态追加新数据至列表。当新数据为空时,设置加载完成标志,显示提示并停止加载。同时,注意在页面切换时需重置页码和数据。
765

被折叠的 条评论
为什么被折叠?



