【微信小程序-原生开发】实用教程14 - 列表的分页加载,触底加载更多(含无更多数据的提醒和显示,自定义组件)

简介: 【微信小程序-原生开发】实用教程14 - 列表的分页加载,触底加载更多(含无更多数据的提醒和显示,自定义组件)

此页可在动态列表的基础上完善,也可以单独学习

【微信小程序-原生开发】实用教程10 - 动态列表的新增、修改、删除

https://blog.csdn.net/weixin_41192489/article/details/128835069

效果预览

核心技术

列表的分页加载

  • skip 跳跃到指定下标开始查询
  • limit 限制返回的数据数量(云数据库最多20条/次,云函数最多100条/次)
  • skip 配合 limit 使用,便能实现分页啦!
.skip(10 * (this.data.currentPage - 1)).limit(10) // 分页

触底加载更多

默认加载列表的第一页数据后,当用户继续下滑列表,直到最后一行数据显示到屏幕中(即页面触底),开始加载下一页的数据

    // 触底加载更多
    onReachBottom: function () {
      // 若已无更多数据,停止加载
      if (this.data.noMore) {
        return
      }
      // 若还有更多数据,当前页码自增1
      this.setData({
        currentPage: this.data.currentPage + 1
      })
      // 查询下一页的数据
      this.getList()
    }

无更多数据的提醒和显示

当无更多数据时,访问接口后需弹窗提示消息,同时,在页面底部保留无更多数据的显示。

              wx.showToast({
                title: `没有更多数据啦!`,
              })

因多个页面需要使用,此处封装成一个公共组件

自定义组件 - noMore

自定义组件的创建

在 pages 文件夹下新建文件夹 components,在components文件夹中新建文件夹 noMore,在文件夹 noMore上右键快捷菜单新建 Component,名称为 index

此时会像新增 Page 一样自动生成四个文件,因此组件无更多逻辑,我们只需修改 wxml 和 wxss 即可

pages\components\noMore\index.wxml

<view class="noMoreBox">
  没有更多数据啦
</view>

pages\components\noMore\index.wxss

.noMoreBox {
  padding: 20rpx;
  text-align: center;
  font-size: 30rpx;
  color: #bbbaba;
  height: 60rpx;
}

自定义组件的使用

当页面中需要使用自定义组件时,需先在 json 中配置

pages\components\message\index.json

在usingComponents 配置中添加

"no-more": "/pages/components/noMore/index",

在页面末尾加上

<no-more wx:if="{{noMore}}" />

完整代码实现

      wx.showLoading({
        title: '加载中',
      })
      db.where(condition)
        .orderBy('date', 'desc') // 按 date 降序, asc 升序  desc 降序
        .skip(10 * (this.data.currentPage - 1)).limit(10) // 分页
        .get().then(
          res => {
            if (res.data.length === 0) {
              this.setData({
                currentPage: this.data.currentPage - 1,
                noMore: true
              })

              wx.showToast({
                title: `没有更多数据啦!`,
              })
            } else {
              let data = res.data.map(item => {
                item.date = DateToStr(item.date)
                return item
              })

              that.setData({
                // 累加已加载数据 concat
                dataList: that.data.dataList.concat(data)
              })
            }

            wx.hideLoading()
          }
        ).catch(() => {
          wx.hideLoading()
        })

目录
相关文章
|
8月前
|
JSON 机器人 API
gewe微信机器人搭建教程
GeWe开放平台是基于 微信开放平台的二次封装API服务,开发者可以使用本服务来处理微信中的各种事件,并可以通过后台调用对应的 API 来驱动微信自动执行任务,如自动收发消息、自动化应答、自动群邀请、群管理等,封装了 RPA技术流程,简化开发者二次开发难度,提供了开发者与微信对接的能力,使用简单,操作快捷,支持多种语言接入。
497 17
|
11月前
|
人工智能 开发框架 机器人
AstrBot:轻松将大模型接入QQ、微信等消息平台,打造多功能AI聊天机器人的开发框架,附详细教程
AstrBot 是一个开源的多平台聊天机器人及开发框架,支持多种大语言模型和消息平台,具备多轮对话、语音转文字等功能。
6252 38
AstrBot:轻松将大模型接入QQ、微信等消息平台,打造多功能AI聊天机器人的开发框架,附详细教程
|
10月前
|
存储 API UED
鸿蒙特效教程02-微信语音录制动画效果实现教程
本教程适合HarmonyOS初学者,通过简单到复杂的步骤,一步步实现类似微信APP中的语音录制动画效果。
429 0
鸿蒙特效教程02-微信语音录制动画效果实现教程
|
JSON 小程序 JavaScript
原生微信小程序笔记完整总结
原生微信小程序笔记完整总结
535 1
|
机器学习/深度学习 人工智能 JSON
微信小程序原生AI运动(动作)检测识别解决方案
近年来,疫情限制了人们的出行,却推动了“AI运动”概念的兴起。AI运动已在运动锻炼、体育教学、线上主题活动等多个场景中广泛应用,受到互联网用户的欢迎。通过AI技术,用户可以在家中进行有效锻炼,学校也能远程监督学生的体育活动,同时,云上健身活动形式多样,适合单位组织。该方案成本低、易于集成和扩展,已成功应用于微信小程序。
|
小程序 JavaScript API
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
这篇文章介绍了如何在uni-app和微信小程序中实现将图片保存到用户手机相册的功能。
3569 0
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
|
小程序 API
微信小程序更新提醒uniapp
在小程序开发中,版本更新至关重要。本方案利用 `uni-app` 的 `uni.getUpdateManager()` API 在启动时检测版本更新,提示用户并提供立即更新选项,自动下载更新内容,并在更新完成后重启小程序以应用新版本。适用于微信小程序,确保用户始终使用最新版本。以下是实现步骤: ### 实现步骤 1. **创建更新方法**:在 `App.vue` 中创建 `updateApp` 方法用于检查小程序是否有新版本。 2. **测试**:添加编译模式并选择成功状态进行模拟测试。
532 0
微信小程序更新提醒uniapp
|
小程序 编译器 数据安全/隐私保护
小白保姆级教程:微信公众号开发,从0到1
【8月更文挑战第8天】小白保姆级教程:微信公众号开发,从0到1
4150 3
小白保姆级教程:微信公众号开发,从0到1
详细教程:扫码提交表单后,数据直接推送到企业微信、钉钉、飞书群聊
在草料制作的表单中,填表人扫码填写并提交数据后,这些信息可以立即通过企业微信、钉钉或飞书自动推送到相应的群聊中,实现即时共享和沟通,提升团队协作效率。
618 2

热门文章

最新文章