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

news2024/11/16 12:00:20

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.coloradmin.cn/o/1270955.html

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

相关文章

PHP在线日语学习平台

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

Java小游戏 王者荣耀(简易版)

GameFrame类 所需图片&#xff1a; package 王者荣耀;import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.io.File; import java.util.ArrayList…

轻型载重汽车转向前桥总成系统毕业设计机械设计

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;前桥 获取完整说明报告工程源文件 绪论 1.1 轻型载重汽车转向桥的设计意义 汽车是现代交通工具中用得最多&#xff0c;最普遍&#xff0c;也是最方便的交通运输工具。汽车转向系是汽车上的一个重要系统,它是汽车转向运动…

基于STC12C5A60S2系列1T 8051单片机的IIC总线器件24C02实现掉电保存计时时间应用

基于STC12C5A60S2系列1T 8051单片机的IIC总线器件24C02实现掉电保存计时时间应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍液晶显示器LCD1602简单介绍IIC通信简单…

用行云管家实现IT统一运维管理,提高运维效率

随着公司业务的不断壮大&#xff0c;需要用到的IT系统也越来越多&#xff0c;使用起来耗时耗力。因此实现IT统一运维管理已成为提高运维效率、降低成本、优化资源配置的重要途径。这里我们小编告诉您&#xff0c;用行云管家实现IT统一运维管理&#xff0c;提高运维效率&#xf…

java元注解

一、注解 Annotation&#xff08;注解&#xff09;是 Java 提供的一种对元程序中元素关联信息和元数据&#xff08;metadata&#xff09;的途径和方法。 Annatation(注解)是一个接口&#xff0c;程序可以通过反射来获取指定程序中元素的 Annotation对象&#xff0c;然后通过该…

焊接设备行业分析:预计2029年将达到834亿元

近年来我国焊割设备行业的主要出口产品多为零部件以及部分中、低端设备&#xff0c;其出口单价和利润额均相对较低。 随着国内原材料价格上涨和人民币不断升值&#xff0c;出口产品的竞争力日趋下降&#xff0c;利润空间也随着出口价格的下降被进一步压缩。同时近年来国际经济形…

猫头虎博主与CSDN的三年之约——我的创作纪念日三周年

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

数学建模-基于脑出血患者院前指标的多种机器学习预测模型构建及比较研究

基基于脑出血患者院前指标的多种机器学习预测模型构建及比较研究 整体求解过程概述(摘要) 卒中是全球致残率、致死率最高的疾病之一&#xff0c;其中脑出血&#xff08;Intracerebral hemorrhage&#xff0c;ICH&#xff09;患者仅占卒中患者的 20%&#xff0c;但致残、死亡人…

Retrobatch for mac图片批处理软件

Retrobatch是一款功能强大的图片批量操作软件&#xff0c;提供了批量加水印、裁剪、压缩等功能&#xff0c;而且处理速度非常快。 在Retrobatch中&#xff0c;用户可以通过拖动相应动作到工作区形成节点(Nodes)&#xff0c;并将节点连接起来形成一个Workflow&#xff0c;最后运…

SpringBoot application.yml配置文件写法

1&#xff0c;基本介绍 &#xff08;1&#xff09;YAML 是 JSON 的超集&#xff0c;简洁而强大&#xff0c;是一种专门用来书写配置文件的语言&#xff0c;可以替代 application.properties。 &#xff08;2&#xff09;在创建一个 SpringBoot 项目时&#xff0c;引入的 spri…

Windows系统搭建Appium 2 和 Appium Inspector 环境

前言 自 2022 年 1 月 1 日起&#xff0c;Appium 核心团队不再维护 Appium 1.x。官方支持的平台驱动程序的所有最新版本均不兼容 Appium 1.x&#xff0c;需要 Appium 2 才能运行。 Appium 2是一个自动化移动应用程序的开源工具&#xff0c;它带来了以下重要改进&#xff1a;  …

【Linux】进程控制--进程创建/进程终止/进程等待/进程程序替换/简易shell实现

文章目录 一、进程创建1.fork函数2.fork函数返回值3.写时拷贝4.fork常规用法5.fork调用失败的原因 二、进程终止1.进程退出码2.进程退出场景3.进程常见退出方法 三、进程等待1.为什么要进行进程等待2.如何进行进程等待1.wait方法2.waitpid方法3.获取子进程status4.进程的阻塞等…

对接电商平台高效获取各大电商平台数据,商品详情数据代码示例

电商可以通过使用API接口获取商品信息数据。API是应用程序编程接口的缩写&#xff0c;它允许程序之间进行通信和数据传输。为了获取商品信息数据&#xff0c;电商可以利用API接口向商品供应商的数据库发送请求&#xff0c;然后接收并解析返回的数据。 具体来说&#xff0c;电商…

高压放大器用于什么地方使用

高压放大器是一种电子设备&#xff0c;用于将低电压信号放大到高电压水平。它主要应用于需要高电压的领域&#xff0c;下面将详细介绍其主要应用地方。 科研实验室&#xff1a;科研实验室通常需要进行高电压实验&#xff0c;例如粒子加速器、高压放电实验等。高压放大器可以为这…

uniapp和vue3+ts实现自定义头部导航栏左侧胶囊内容

由于某些原因&#xff0c;可能需要我们自己定义头部导航栏的内容&#xff0c;实现各种设计师画的设计稿&#xff0c;所以就需要这个自定义的组件&#xff0c;实现的内容&#xff1a;自定义标题和左侧胶囊图标内容&#xff0c;也可以自定义搜索内容到里面&#xff0c;实现的效果…

网络和Linux网络_7(传输层)UDP和TCP协议(端口号+确认应答+超时重传+三次握手四次挥手)

目录 1. 重看端口号 1.1 端口号的概念 1.2 端口号的划分 2. 重看UDP协议 2.1 UDP协议格式 2.2 UDP的特点 3. 重看TCP协议 3.1 TCP协议格式 3.2 TCP的解包分用 3.3 TCP的可靠性及机制 3.3.1 确认应答ACK机制 3.3.2 超时重传机制 3.3.3 连接管理机制&#xff08;三次…

HCIP-十三、BGP综合选路

十三、BGP综合选路 实验拓扑实验需求及解法1.预配置包括2.在所有设备的系统视图下配置全局router id为Loopback0地址。3.内部网关协议IGP4.建立BGP邻居5.发布BGP路由6.协议优先级选路7. 权重&#xff08;PrefVal&#xff09;选路8.本地优先&#xff08;LocPrf&#xff09;选路9…

linux 消息队列apache-activemq服务的安装

1.下载 官网下载地址&#xff1a;https://activemq.apache.org/ 操作如下&#xff1a; 2. 解压 执行&#xff1a;tar -zxvf apache-activemq-5.18.3-bin.tar.gz -C /user/ 3. 进入目录 执行&#xff1a;cd /user/apache-activemq-5.18.3 4.修改配置文件 执行&#xff1…

【分享】centos7vim异常

问题描述: 虚拟机安装centos7&#xff0c;安装vim后异常&#xff0c;上下左右键会变成abcd,退格键无法删除。 系统版本: CentOS Linux release 7.5.1804 (Core) 原因: 暂时未知&#xff0c;有可能是vim安装时&#xff0c;一个组件未安装导致。后续追溯 解决方案: echo &quo…