在数据量较大时采用后端分页是常用的方法,与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; }
准备工作就绪!
首先在 onl oad 阶段请求列表数据
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(); },
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。