当前位置:   article > 正文

uni-app 数据上拉加载更多功能_上拉增量加载的功能,新增的内容为原有重复内容即可

上拉增量加载的功能,新增的内容为原有重复内容即可

 

实现上拉加载更多

  • 打开项目根目录中的 pages.json 配置文件,为 subPackages 分包中的商品 goods_list 页面配置上拉触底的距离:
  1. "subPackages": [
  2. {
  3. "root": "subpkg",
  4. "pages": [
  5. {
  6. "path": "goods_detail/goods_detail",
  7. "style": {}
  8. },
  9. {
  10. "path": "goods_list/goods_list",
  11. "style": {
  12. "onReachBottomDistance": 150
  13. }
  14. },
  15. {
  16. "path": "search/search",
  17. "style": {}
  18. }
  19. ]
  20. }
  21. ]
  • 在 goods_list 页面中,和 methods 节点平级,声明 onReachBottom 事件处理函数,用来监听页面的上拉触底行为:
  1. // 触底的事件
  2. onReachBottom() {
  3. // 让页码值自增 +1
  4. this.queryObj.pagenum += 1
  5. // 重新获取列表数据
  6. this.getGoodsList()
  7. }
  •  改造 methods 中的 getGoodsList 函数,当列表数据请求成功之后,进行新旧数据的拼接处理:
  1. // 获取商品列表数据的方法
  2. async getGoodsList() {
  3. // 发起请求
  4. const { data: res } = await uni.$http.get('/api/public/v1/goods/search', this.queryObj)
  5. if (res.meta.status !== 200) return uni.$showMsg()
  6. // 为数据赋值:通过展开运算符的形式,进行新旧数据的拼接
  7. this.goodsList = [...this.goodsList, ...res.message.goods]
  8. this.total = res.message.total
  9. }

优化:

通过节流阀防止发起额外的请求 

  • 在 data 中定义 isloading 节流阀如下:
  1. data() {
  2. return {
  3. // 是否正在请求数据
  4. isloading: false
  5. }
  6. }
  •  修改 getGoodsList 方法,在请求数据前后,分别打开和关闭节流阀:
  1. // 获取商品列表数据的方法
  2. async getGoodsList() {
  3. // ** 打开节流阀
  4. this.isloading = true
  5. // 发起请求
  6. const { data: res } = await uni.$http.get('/api/public/v1/goods/search', this.queryObj)
  7. // ** 关闭节流阀
  8. this.isloading = false
  9. // 省略其它代码...
  10. }
  • 在 onReachBottom 触底事件处理函数中,根据节流阀的状态,来决定是否发起请求:
  1. // 触底的事件
  2. onReachBottom() {
  3. // 判断是否正在请求其它数据,如果是,则不发起额外的请求
  4. if (this.isloading) return
  5. this.queryObj.pagenum += 1
  6. this.getGoodsList()
  7. }

 判断数据是否加载完毕

  • 如果下面的公式成立,则证明没有下一页数据了:
  1. 当前的页码值 * 每页显示多少条数据 >= 总数条数
  2. pagenum * pagesize >= total
  • 修改 onReachBottom 事件处理函数如下:
  1. // 触底的事件
  2. onReachBottom() {
  3. // 判断是否还有下一页数据
  4. if (this.queryObj.pagenum * this.queryObj.pagesize >= this.total) return uni.$showMsg('数据加载完毕!')
  5. // 判断是否正在请求其它数据,如果是,则不发起额外的请求
  6. if (this.isloading) return
  7. this.queryObj.pagenum += 1
  8. this.getGoodsList()
  9. }

下一篇:uni-app 数据下拉刷新功能https://blog.csdn.net/SmartJunTao/article/details/123684580

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/221421
推荐阅读
相关标签
  

闽ICP备14008679号