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

news/2024/7/20 2:09:07 标签: 学习, 微信小程序, 小程序

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.niftyadmin.cn/n/5230044.html

相关文章

Ubuntu 2204 安装libimobiledevice

libimobiledevice是一个开源的软件&#xff0c;它可以直接使用系统原生协议和IOS设备进行通信&#xff0c;类似iMazing&#xff0c;iTunes&#xff0c;libimobiledevice不依赖IOS的私有库&#xff0c;并且连接IOS设备时用的都是原生协议&#xff0c;IOS无需越狱就能实现设备信息…

git小白初学习

#1. 安装 http://npm.taobao.org/mirrors/git-for-windows/ #2. 设置自己的用户信息&#xff0c;方便各个节点知道这个客户端是谁 #全局设置 git config --global user.name ‘xyg’ git config --global user.email ‘1584066465qq.com’ #对单个仓库设置 cd 到对应仓库下 g…

P29 C++箭头运算符以及它对于结构体与类的指针关系

本期的主要内容是箭头运算符以及它对于结构体与类的指针可以做什么&#xff0c;最后实现我们自己的运算符重载。 01 为什么要使用运算符重载 从开发的角度而言&#xff0c;运算符重载的存在是为了提高开发效率&#xff0c;增加代码的可复用性&#xff0c;很多时候简化了代码。…

「Linux」使用C语言制作简易Shell

&#x1f4bb;文章目录 &#x1f4c4;前言简易shell实现shell的概念系统环境变量shell的结构定义内建命令完整代码 &#x1f4d3;总结 &#x1f4c4;前言 对于很多学习后端的同学来讲&#xff0c;学习了C语言&#xff0c;发现除了能写出那个经典的“hello world”以外&#xff…

前端开启gzip优化页面加载速度

生成gizp的打包资源&#xff0c;可以优化页面加载速度 打包的时候开启gzip可以很大程度减少包的大小&#xff0c;页面大小可以变为原来的30%甚至更小,非常适合线上部署, 但还记得需要服务端支持 1、前端配置compression-webpack-plugin 先安装&#xff1a;npm install compres…

自定义 element DatePicker组件指令 使选择器呈现为只读状态,用户无法直接编辑,但可以查看和选择日期

1.问题 现实中遇到列表的搜索条件使用DatePicker 组件进行开始结束时间筛选&#xff0c;但是手动修改input中的值&#xff0c;导致请求参数异常。比如讲clearable设置为false之后还是能手动清空输入框中的值。虽然组件提供了readonly 属性&#xff0c;但是也会让日期选择也无法…

Redis主从与哨兵架构详解

目录 主从架构 主从环境搭建 主从复制流程 1. 全量复制 2. 部分复制 主从风暴 哨兵架构 概念 哨兵环境搭建 主从架构 主从环境搭建 1. 复制一份redis.conf文件, 修改下面几行配置 port 6380 pidfile /var/run/redis_6380.pid logfile "6380.log" dir /usr/…

NOIP2007提高组第二轮T3:矩阵取数游戏

题目链接 [NOIP2007 提高组] 矩阵取数游戏 题目描述 帅帅经常跟同学玩一个矩阵取数游戏&#xff1a;对于一个给定的 n m n \times m nm 的矩阵&#xff0c;矩阵中的每个元素 a i , j a_{i,j} ai,j​ 均为非负整数。游戏规则如下&#xff1a; 每次取数时须从每行各取走一…