《微信小程序开发从入门到实战》学习三十七

4.2 云开发JSON数据库

4.2.8 分页查询

在计算机互联网时代,很多页面底部分页导航按钮,有首页、上一页、第一页、第二页、尾页。

分页查询是指根据页码将每一页的数据查询出来。

在移动互联网时代,网页和应用都对网页进行优化,页面上拉触底时自动加载下一页。

分页查询示例代码如下:

Page({

  /**

   * 页面的初始数据

   */

  data: {

    pageData: [], // 已经获取的分页数据,通常会在视图层用wx:for列表渲染该数据

    nextPage: 0 // 下拉触底时,应该获取下一页数据的页码,从0开始

  },

  /**

   * 生命周期函数--监听页面加载

   */

  onLoad(options) {

    this.getNextPageData() //进入页面时立即获得第0页的数据

  },

  /**

   * 页面上拉触底事件的处理函数

   */

  onReachBottom() {

    this.getNextPageData() //页面下拉触底时获取下一页的数据

  },

  getNextPageData() {

    const PAGE_COUNT = 20 //使用常量表示每一页显示的数据的数量

    const db = wx.cloud.database() //获取数据库的引用

    db.collection('testOne').count().then(res =>{ //集合中的记录的数量

      const totalCount = res.total

      const totalPages = Math.ceil(totalCount / PAGE_COUNT) //计算总页数,小数向上取整

      if (this.data.nextPage < totalPages){ //当下一页存在

        db.collection('testOne')

        .skip(this.data.nextPage * PAGE_COUNT) //跳过已经获取的数据

        .limit(PAGE_COUNT) 

        .get().then(res2 => { // 为了防止命名冲突,返回值命名为res2

          // 将已有的pageData与新获得的20条数据合并成一个新的数组

          const pageData = this.data.pageData.concat(res2.data)

          this.setData({

            pageData, // 将合并后的数据更新到data对象中

            nextPage: this.data.nextPage + 1 // 将nextPage更新为下一页

          })

          console.log(res2.data)

          console.log(this.data.nextPage)

        })

      } else {

        console.log('no more data')

      }

    })

  }

})

 PAGE_COUNT = 20常量表示每一页显示的数据的数量,是微信小程序端的数量限制是20,服务端API的数量限制为100。

在分页查询时,首先需要在集合引用上使用count方法获取集合中所有记录的总数量,然后通过记录数量和PAGE_COUNT相除向上取整计算出总页数。

Math.ceil对小数向上取整,Math.floor对小数向下取整,Math.round对小数四舍五入。

计算出总页数,比较nextPage变量与总页数的大小,判断当前是否已经将数据全部获取完毕。数据没获取完,则在下拉触底时,通过集合引用上的get方法继续获取数据。

集合引用调用get方法前,通过skip方法指定需要跳过几条记录,在limit方法指定本次获取几条记录。limit上限20,服务端上限100。

获取到数据,用数组上的的concat方法将pageData与新获得20条数据合并成一个新的数组,同时页数加+1,并更新到data对象。

then方法代表使用了Promise风格的写法,好处是then方法函数中,this仍为这个页面对象。如果使用回调风格的写法,在success函数中,this值会被改变不再为原来的页面对象,需要在调用前将this对象提前记录下来。

成功运行非常开心,分享它打印在调试台数据,图片如下:

回调风格的写法的分页查询代码如下:

  getNextPageData() {

    const PAGE_COUNT = 20 

    const db = wx.cloud.database() 

    const _this = this //将this对象提前用变量记录下来

    db.collection('testOne').count({

      success(res) {

        const totalCount = res.total

        const totalPages = Math.ceil(totalCount / PAGE_COUNT) 

        if (_this.data.nextPage < totalPages){ //在success函数中需要用_this代替this

          db.collection('testOne')

          .skip(_this.data.nextPage * PAGE_COUNT)

          .limit(PAGE_COUNT)

          .get({

            success(res2) { //使用回调风格的API

              //在success函数中需要用_this代替this

              const pageData = _this.data.pageData.concat(res2.data)

              _this.setData({

                pageData,

                nextPage:_this.data.nextPage+1

              })

              console.log(_this.data.pageData)

              console.log(_this.data.nextPage)

            }

          })

        }else{

          console.log('no more data')

        }

      }

    })

  }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/184448.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅谈安科瑞网络电力仪表在斯里兰卡某项目的应用

摘要&#xff1a;安科瑞APM系列网络仪表适用于高低压柜&#xff0c;进线以及出线处的全电量测量及监测。 Absrtact: APM series of network power meter are suitable for full power measurement and monitoring of high and low voltage cabinets, incoming and outgoing li…

低功耗CMOS实时时钟/日历电路芯片D8563,1.0~5.0V,内置报警和定时器,电源复位功能

D8563是低功耗的CMOS实时时钟/日历电路,它提供一个可编程时钟输出&#xff0c;一个中断输出和掉电检测器&#xff0c;所有的地址和数据通过IC总线接口串行传递。最大总线速度为400Kbitss每次读写数据后&#xff0c;内嵌的字地址寄存器会自动产生增量。 主要特点&#xff1a; …

Python异常处理:try...except语句

Python是一门非常灵活且易于学习的编程语言&#xff0c;在日常开发中被广泛应用。然而&#xff0c;由于各种原因&#xff0c;我们的代码可能会出现异常情况&#xff0c;例如输入错误、文件读写异常等等。Python异常处理是Python中重要的一部分&#xff0c;为了保证程序的稳定性…

一、Gradle 手动创建一个项目

文章目录 Gradle 介绍Gradle Wrapper Gradle 使用手动安装 Gradle初始化 Gradle 介绍 Gradle 是一个快速的、可信的、适应性强的自动化构建工具&#xff0c;它是开源的。它使用优雅的并且可扩展的描述性语言。其他的介绍在官网可以了解。 Gradle Wrapper 官方建议使用 Gradl…

适配器模式-C++实现

适配器是一种结构型设计模式&#xff0c;用于将一个接口转换为另一个客户端所需要的接口。该模式通过创建一个适配器对象&#xff0c;使不兼容的接口可以协同工作。 适配器模式主要分为三个角色&#xff1a;适配器类、目标类、适配者类。 适配器模式分为对象适配器和类适配器…

信号收尾.

sigaction 信号捕捉 它也是信号捕捉&#xff0c;不仅能处理普通信号还能处理实时信号&#xff0c;但我们不管实时信号 我们发现函数名和形参中结构体名一样都是sigaction&#xff0c;这在c/c中允许吗&#xff1f; 不建议&#xff0c;但是可以 signo你要捕捉几号信号 输入型参…

老泮识趣:难忘何家桥

回忆何家桥往事&#xff0c;写了篇《消失的何家桥》&#xff0c;没想到点击率如此高&#xff0c;出乎意料。网友的共鸣可见&#xff0c;城市发展的今天&#xff0c;乡情是个美好的存在&#xff0c;清贫、朴实&#xff0c;丝毫不影响美感。由于大家的鼓励&#xff0c;触动了我再…

基于Netty实现TCP通信

创建一个Maven项目添加下面依赖 <dependencies><!-- 日志依赖 --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.32</version></dependency><dependency><g…

TCP 连接断开

1&#xff1a;TCP 四次挥手过程是怎样的&#xff1f; 客户端打算关闭连接&#xff0c;此时会发送一个 TCP 首部 FIN 标志位被置为 1 的报文&#xff0c;也即 FIN 报文&#xff0c;之后客户端进入 FIN_WAIT_1 状态。 服务端收到该报文后&#xff0c;就向客户端发送 ACK 应答报文…

阿里云崩溃了,为什么你没有收到补偿?【补偿领取方式放文末】

事情经过 北京时间11月27日&#xff0c;阿里云部分地域云数据库控制台访问出现异常。据悉&#xff0c;从当日09:16起&#xff0c;阿里云监控发现北京、上海、杭州、深圳、青岛、香港以及美东、美西地域的数据库产品(RDS、PolarDB、Redis等)的控制台和OpenAPI访问出现异常&…

PHP在线日语学习平台

有需要请加文章底部Q哦 可远程调试 PHP在线日语学习平台 一 介绍 此日语学习平台基于原生PHP开发&#xff0c;数据库mysql。系统角色分为用户和管理员。(附带参考设计文档) 技术栈&#xff1a;phpmysqlphpstudyvscode 二 功能 学生 1 注册/登录/注销 2 个人中心 3 查看课程…

C#开发的OpenRA游戏之属性SelectionDecorations(14)

C#开发的OpenRA游戏之属性SelectionDecorations(14) 前面分析选择类时,还有一个功能,就是把选中物品的状态和生命值显示出来。 它是通过下面的函数来实现: protected override IEnumerable<IRenderable> RenderSelectionBars(Actor self, WorldRenderer wr, bool …

kubernetes(k8s)容器内无法连接同所绑定的Service ClusterIP问题记录

kubernetes(k8s)容器内无法连接同所绑定的Service ClusterIP问题记录 1. k8s环境 k8s使用kubernetes-server-linux-amd64_1.19.10.tar.gz 二进制bin 的方式手动部署 k8s 版本: [rootmaster ~]# kubectl version Client Version: version.Info{Major:"1", Minor:&…

CentOS7安装RabbitMQ

服务器系统版本&#xff1a;CentOS7 安装RabbitMq版本&#xff1a;3.7.18 将此安装包目录下的两个文件上传到服务/usr/local/rabbitmq中备用。 安装Erlang依赖包 rpm -ivh erlang-22.0.7-1.el7.x86_64.rpm安装RabbitMQ安装包(需要联网) yum install -y rabbitmq-server-3.7.1…

yml转properties工具

目前搜索到的大部分代码都存在以下问题&#xff1a; 复杂结构解析丢失解析后顺序错乱 所以自己写了一个&#xff0c;经过不充分测试&#xff0c;基本满足使用。可以直接在线使用 在线地址 除了yml和properties互转之外&#xff0c;还可以生成代码、sql转json等&#xff0c;可…

深入解析进程

在现代计算机系统中&#xff0c;进程是一个核心概念&#xff0c;它代表了程序的执行实例。通过并发执行多个进程&#xff0c;计算机能够提高效率和资源利用率。 1. 进程的概念 进程是指在计算机系统中正在执行的程序的实例。每个进程都有自己的地址空间、寄存器集合、堆栈和文…

【Linux】OpenSSH 命令注入漏洞(CVE-2020-15778)(iptables屏蔽22端口方式)

背景 漏洞名称&#xff1a;OpenSSH 命令注入漏洞(CVE-2020-15778) 详细描述&#xff1a;OpenSSH&#xff08;OpenBSD Secure Shell&#xff09;是OpenBSD计划组的一套用于安全访问远程计算机的连接工具。该工具是SSH协议的开源实现&#xff0c;支持对所有的传输进行加密&#…

DaVinci Resolve Studio达芬奇软件 18.6.3

DaVinci Resolve Studio 18是一款专业的视频编辑和调色软件&#xff0c;适用于电影、电视节目、广告等各种视觉媒体的制作。它具有完整的后期制作功能&#xff0c;包括剪辑、调色、特效、音频处理等。 以下是DaVinci Resolve Studio 18的主要特点&#xff1a; - 提供了全面的视…

CAN网络出现错误帧从哪些方面去分析解决

标题&#xff1a;CAN网络出现错误帧从哪些方面去分析 实例1&#xff1a; 断电重启后&#xff0c;会有错误帧产生。 检查方案&#xff1a; 查看收发模块的初始化、使能是否在发送CAN报文之前完成&#xff1f; 实例2&#xff1a; 周期性报文&#xff0c;有时会冒出一帧错误帧&…

【接口自动化】selenium库也有大用场(获取cookie)

相信有些童鞋在做接口、或者说接口自动化测试的过程中会遇到这样的场景&#xff1a;测试的接口&#xff0c;必须是需要登录后才能发起请求成功的。 那么怎么解决呢&#xff1f; 本着团队协作的精神&#xff0c;我们就去让开发同学开个后门&#xff0c;给你个“万能”值&#x…