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

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

时间:2023-04-03 12:06:35浏览次数:40  
标签:实用教程 自定义 数据 components noMore currentPage data 加载


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

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

效果预览

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

核心技术

列表的分页加载

  • 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()
    }

无更多数据的提醒和显示

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

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

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

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

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

自定义组件 - noMore

自定义组件的创建

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

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


此时会像新增 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()
        })


标签:实用教程,自定义,数据,components,noMore,currentPage,data,加载
From: https://blog.51cto.com/u_15715491/6165941

相关文章

  • 【微信小程序-原生开发】实用教程17 - 详情页触发列表页刷新,点击图片放大预览,转发给好
    详情页触发列表页刷新需求描述:在详情页进行点赞/收藏操作,再返回到列表页,发现列表页并没有同步更新点赞/收藏的状态。解决方案:在详情页执行任何触发列表页展示内容的数据更新时,都同步执行列表页的刷新代码实现:因列表页通常为详情页的上一页,所以详情页触发列表页的刷新实际上是触发上......
  • Element UI 【表格合计】el-table 实战范例 -- 添加单位,自定义计算逻辑
    需求描述末尾合计行的需求如下:第1列显示“合计”无法求和的列,显示“——”可以求和的列,显示求和结果,并添加对应的单位命中率列的合计逻辑为:总命中数/总射击次数代码实现要点详见代码中的备注<template><divclass="tableBox"><el-table:data="tableData"bo......
  • ue4 加载资源
    1.通过引用路径加载资源,得到UObject:SAR_SoUnrealPath=TEXT("Texture2D'/Game/UI/Images/SoUnreal.SoUnreal'");UObject*Obj=LoadObject<UObject>(nullptr,path,nullptr,load_nowarn|load_noredirects);编辑器就loadObject,类型名可以是utexture等。还可以异步,同......
  • swiper插件加载时宽度显示错误
    最近在使用swiper插件编写滑动轮播图,要求一次显示多个图片,但出现了一个问题,首次进入没问题,但跳转页面返回后图片宽度会发生变化,大致情况如下:这是正常情况,可以左右滑动js代码如下:但页面跳转返回后,页面就变成了这种:并且左右滑动也会有各种问题。后来上网查了一下原因,发现出......
  • VS2017 未能正确加载“ReferenceManagerPackage”包
    MicrosoftVisualStudio未能正确加载“ReferenceManagerPackage”包。1.以管理员身份打开DeveloperCommandPromptforVS20172.定位到你的vs2017的安装目录我安装的是企业版就是E:\ProgramFiles(x86)\MicrosoftVisualStudio\2017\Enterprise\Common7\IDE\PublicAssemblies......
  • vue3 - 引入自定义插件的组件的具体写法
    1.背景我的这一篇随笔详细讲解组件怎么制作与引入使用【vue3-在单独的项目制作自定义组件插件,支持vite【前提不要使用webpack专属语法】,并引入插件-心得-岑惜-博客园(cnblogs.com)】但在局部引入组件时,eslint红色警告   引用名言:“又不是不能用==”强迫症看着实......
  • nginx 热加载stream模块
    报错:nginx:[emerg]unknowndirective"stream"in/usr/local/nginx/conf.d/ssh.conf判断模块是否存在 进入二进制部署包解压后目录 添加模块,与之前加载的模块一致,并新添加 --with-stream模块./configure--prefix=/usr/local/nginx--user=nginx--group=nginx......
  • jquery加载页面的方法(页面加载完成就执行)
    jquery加载页面的方法(页面加载完成就执行) 转自 http://www.jb51.net/article/27444.htm jquery加载页面的方法(页面加载完成就执行),建议大家看下windows.onload与$(document).ready之间的区别。 1、$(function(){ $("#a").click(function(){ //addin......
  • 微信小程序自定义封装组件-showModal
    封装一个组件这里由于最近使用微信小程序居多,所以着重写的是小程序的,但是万变不离其宗,组件实现思路其实都差不多的微信小程序开发中官方自带的wx.showModal,这个弹窗API有时候并不能满足我们的弹窗效果,所以往往需要自定义modal组件。下面我们进行一个自定义modal弹窗组件的开发,并......
  • 类加载机制-打破双亲委派机制
     1.什么是双亲委派机制双亲委派机制是Java类加载器的一种工作机制,它的主要思想是:如果一个类加载器收到了类加载请求,它首先不会自己去尝试加载这个类,而是把这个请求委托给父类加载器去完成。如果父类加载器还存在父类加载器,则进一步向上委托,依次递归,直到委托到最顶层的启动类加......