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

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.mfbz.cn/a/206144.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Serverless架构组成及优势适用场景】

目录 引言 一、无服务器函数&#xff08;Serverless Functions&#xff09; 二、事件驱动&#xff08;Event-Driven&#xff09; 三、自动扩展&#xff08;Auto Scaling&#xff09; 四、按需计费&#xff08;On-Demand Billing&#xff09; 五、无状态&#xff08;State…

程序/进程替换(讲解)

本文旨在讲解进程替换的知识&#xff01;希望读完本文&#xff0c;能使读者对进程替换有更深一步的认识&#xff01;&#xff01;好的&#xff0c;废话不多说&#xff0c;干货来了&#xff01; 进程替换的引进&#xff01; 为什么要引进进程替换呢&#xff1f;我们创建子进程总…

系列十三、SpringBoot的自动配置原理

一、概述 我们知道Java发展到现在功能十分的强大&#xff0c;生态异常的丰富&#xff0c;这里面离开不了Spring及其家族产品的支持&#xff0c;而作为Spring生态的明星产品Spring Boot可以说像王者一般的存在&#xff0c;那么的耀眼&#xff0c;那么的光彩夺目&#xff01;那么…

QT线程的使用 循环中程序的等待

QT线程的使用 循环中程序的等待 先看效果1 pro文件2 头文件3 源文件4 ui文件先看效果 1 pro文件 QT += concurrent2 头文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H

Vue中 env 文件是如何读取的? 优先级?

Vue中 env 文件是如何读取的&#xff1f; 优先级&#xff1f; start 今天来研究一下 Vue 中 env 是如何读取的。跟着我的脚步来学习一下吧。作者&#xff1a;番茄&#xff1b;编写时间&#xff1a;2023/11/30 前情提要 env&#xff0c;使用方式是process.env。简单来说&…

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

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

【深度学习】KMeans中自动K值的确认方法

1 前言 聚类常用于数据探索或挖掘前期&#xff0c;在没有做先验经验的背景下做的探索性分析&#xff0c;也适用于样本量较大情况下的数据预处理等方面工作。例如针对企业整体用户特征&#xff0c;在未得到相关知识或经验之前先根据数据本身特点进行用户分群&#xff0c;然后再…

【腾讯云云上实验室】个人对腾讯云向量数据库的体验心得

目录 前言Tencent Cloud VectorDB概念使用初体验腾讯云向量数据库的优势应用场景有哪些&#xff1f;未来展望番外篇&#xff1a;腾讯云向量数据库的设计核心结语 前言 还是那句话&#xff0c;不用多说想必大家都能猜到&#xff0c;现在技术圈最火的是什么&#xff1f;非人工智…

Spring Security 6.x 系列(7)—— 源码分析之建造者模式

一、建造者模式 WebSecurity、HttpSecurity、AuthenticationManagerBuilder 都是框架中的构建者&#xff0c;把他们放到一起看看他们的共同特点&#xff1a; 查看AuthenticationManagerBuilder的继承结构图&#xff1a; 查看HttpSecurity的继承结构图&#xff1a; 查看WebSec…

Logstash使用指南

介绍 Logstash是一个开源数据收集引擎&#xff0c;具有实时管道功能。它可以动态地将来自不同数据源的数据统一起来&#xff0c;并将数据标准化到你所选择的目的地。尽管Logstash的早期目标是搜集日志&#xff0c;现在它的功能已完全不只于此。任何事件类型都可以加入分析&…

鸿蒙原生应用/元服务开发-开发者如何进行真机测试

前提条件&#xff1a;已经完成鸿蒙原生应用/元服务开发&#xff0c;已经能相对熟练使用DevEco Studio,开发者自己有鸿蒙4.0及以上的真机设备。 真机测试具体流程如下 1.手机打开开发者模式 2.在项目中&#xff0c;左上角 文件(F)->项目结构 进行账号连接 3.运行

智慧配电间(配电室智能监控)

智慧配电间是一种应用物联网、云计算、大数据等先进技术&#xff0c;对配电室进行智能化改造和升级&#xff0c;依托电易云-智慧电力物联网&#xff0c;实现电力设备的实时监控、智能控制和远程管理的解决方案。以下是智慧配电间的主要功能和特点&#xff1a; 实时监控与数据分…

简明指南:使用Kotlin和Fuel库构建JD.com爬虫

概述 爬虫&#xff0c;作为一种自动化从网络上抓取数据的程序&#xff0c;广泛应用于数据分析、信息提取以及竞争对手监控等领域。不同的实现方式和编程语言都能构建出高效的爬虫工具。在本文中&#xff0c;我们将深入介绍如何充分利用Kotlin和Fuel库&#xff0c;构建一个简单…

【蓝桥杯选拔赛真题28】C++口罩分配 第十三届蓝桥杯青少年创意编程大赛C++编程选拔赛真题解析

目录 C/C++口罩分配 一、题目要求 1、编程实现 2、输入输出 二、算法分析 <

IOS/安卓+charles实现抓包(主要解决证书网站无法打开问题)

安装 官网下载 https://www.charlesproxy.com/latest-release/download.do 安装charles文档 流程 上述链接解决下图问题 使用介绍 Charles介绍 上述链接看一至三即可&#xff0c;了解首页各个按钮的作用 charles全面使用教程及常见功能详解&#xff08;较详细&#xff09…

常见智力题汇总

常见智力题汇总 扔瓶子问题扑克牌问题出队问题烧绳子问题赛马问题求出前三名求出前五名 接水问题种树问题硬币问题宝石问题核酸检测问题 笔者最近面试遇到了好几道智力题&#xff0c;这些题目特点就是如果没有见过&#xff0c;很难第一时间思考得到答案&#xff0c;因此笔者面试…

Spire.Office 8.11.2 for NET fix Crack

内容摘自来自互联网------或者SDK官方本身手册 Spire.Doc for .NET A professional Word .NET library designed to create, read, write, convert and print Word document files in any .NET ( C#, VB.NET, ASP.NET, .NET Core, Xamarin ) application with fast and high qu…

常见算法

简单认识算法 什么是算法&#xff1f; 解决某个实际问题的过程和方法&#xff01; 排序算法 冒泡排序 选择排序 冒泡排序 每次从数组中找到最大值放在数组的后面去 import java.util.Arrays;public class Work1 {public static void main(String[] args) {//准备一个数组in…

Windows11如何让桌面图标的箭头消失(去掉快捷键箭头)

在Windows 11中&#xff0c;桌面图标的箭头是快捷方式图标的一个标志&#xff0c;用来表示该图标是一个指向文件、文件夹或程序的快捷方式。如果要隐藏这些箭头&#xff0c;你需要修改Windows注册表或使用第三方软件。 在此之前&#xff0c;我需要提醒你&#xff0c;修改注册表…

Unity3D 导出的apk进行混淆加固、保护与优化原理(防止反编译)

​ 目录 前言&#xff1a; 准备资料&#xff1a; 正文&#xff1a; 1&#xff1a;打包一个带有签名的apk 2&#xff1a;对包进行反编译 3&#xff1a;使用ipaguard来对程序进行加固 前言&#xff1a; 对于辛辛苦苦完成的apk程序被人轻易的反编译了&#xff0c;那就得不偿…
最新文章