小程序之上拉加载

目录

1.初步实现上拉加载更多

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

3.判断数据是否加载完毕


1.初步实现上拉加载更多

  1. 打开项目根目录中的 pages.json 配置文件,为 subPackages 分包中的 goods_list 页面配置上拉触底的距离:  "onReachBottomDistance"

  2.  "subPackages": [
       {
         "root": "subpkg",
         "pages": [
           {
             "path": "goods_detail/goods_detail",
             "style": {}
           },
           {
             "path": "goods_list/goods_list",
             "style": {
               "onReachBottomDistance": 150
             }
           },
           {
             "path": "search/search",
             "style": {}
           }
         ]
       }
     ]
    
  3. 在 goods_list 页面中,和 methods 节点平级,声明 onReachBottom 事件处理函数,用来监听页面的上拉触底行为:

    // 触底的事件
    onReachBottom() {
      // 让页码值自增 +1
      this.queryObj.pagenum += 1
      // 重新获取列表数据
      this.getGoodsList()
    }
    
  4. 改造 methods 中的 getGoodsList 函数,当列表数据请求成功之后,进行新旧数据的拼接处理:

    // 获取商品列表数据的方法
    async getGoodsList() {
      // 发起请求
      const { data: res } = await uni.$http.get('/api/public/v1/goods/search', this.queryObj)
      if (res.meta.status !== 200) return uni.$showMsg()
    
      // 为数据赋值:通过展开运算符的形式,进行新旧数据的拼接
      this.goodsList = [...this.goodsList, ...res.message.goods]
      this.total = res.message.total
    }

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

  1. 在 data 中定义 isloading 节流阀如下:

    data() {
      return {
        // 是否正在请求数据
        isloading: false
      }
    }
    
  2. 修改 getGoodsList 方法,在请求数据前后,分别打开和关闭节流阀:

    // 获取商品列表数据的方法
    async getGoodsList() {
      // ** 打开节流阀
      this.isloading = true
      // 发起请求
      const { data: res } = await uni.$http.get('/api/public/v1/goods/search', this.queryObj)
      // ** 关闭节流阀
      this.isloading = false
    
      // 省略其它代码...
    }
    
  3. 在 onReachBottom 触底事件处理函数中,根据节流阀的状态,来决定是否发起请求:

    // 触底的事件
    onReachBottom() {
      // 判断是否正在请求其它数据,如果是,则不发起额外的请求
      if (this.isloading) return
    
      this.queryObj.pagenum += 1
      this.getGoodsList()
    }

3.判断数据是否加载完毕

  1. 如果下面的公式成立,则证明没有下一页数据了:

    当前的页码值 * 每页显示多少条数据 >= 总数条数
    pagenum * pagesize >= total
    
  2. 修改 onReachBottom 事件处理函数如下:

    // 触底的事件
    onReachBottom() {
      // 判断是否还有下一页数据
      if (this.queryObj.pagenum * this.queryObj.pagesize >= this.total) return uni.$showMsg('数据加载完毕!')
    
      // 判断是否正在请求其它数据,如果是,则不发起额外的请求
      if (this.isloading) return
    
      this.queryObj.pagenum += 1
      this.getGoodsList()
    }

提示 

在 onReachBottom  函数里 要让数据 自增   也就是 

 this.queryObj.pagenum += 1

这个功能实现,必须要先在 请求中 完成新旧数据的拼接,否则它会直接 覆盖上一页的内容,不会自增数据

// 为数据赋值:通过展开运算符的形式,进行新旧数据的拼接
  this.goodsList = [...this.goodsList, ...res.message.goods]

注意

后续  为数据赋值时 一定要把 请求中的数据(res.message.goods)位置 放在展开运算符的最后一位,放在前面的话,它会覆盖上一页的内容

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信小程序Demo–吃货APP(上拉加载更多,下刷新)是一个功能丰富且易于定制的源码项目。它为开发者提供了一个直观的平台,用于学习、实践以及优化小程序开发中的各种关键技术。 该Demo的核心功能围绕“吃货”主题展开,展示了美食推荐、分类筛选、搜索、查看图文详情以及收藏等功能。用户界面简洁直观,符合主流的审美习惯和操作逻辑,极大地提升了用户体验。 在技术实现上,该项目采用了业界领先的小程序开发框架,并深度集成了微信官方提供的各种API和组件。通过封装了网络请求、数据缓存等常用功能的自定义模块,项目实现了高效的数据交互和处理机制,确保了应用的稳定性和流畅性。 值得一提的是,该Demo特别强调了上拉加载和下刷新的实现方式。上拉加载功能允许用户在浏览过程中轻松加载更多内容,无需频繁切换页面;而下刷新则提供了即时的数据更新机制,确保用户能够获取到最新的信息。 此外,项目还充分考虑了二次开发的定制需求。其源码结构清晰、注释详细,为开发者提供了充分的自由度和灵活性,可以根据自身需求进行定制和扩展。无论是添加新功能还是优化现有体验,都能轻松应对。 总之,微信小程序Demo–吃货APP(上拉加载更多,下刷新)是一个集实用性、易用性和可扩展性于一体的优质源码项目。无论您是小程序开发的新手还是资深专家,都能从中获得宝贵的经验和启示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值