云开发学习4--分页加载

一,使用同名函数来简化代码

前端代码

<button bindtap="getData" data-page="1">加载第一页</button>
<button bindtap="getData" data-page="2">加载第二页</button>
<button bindtap="getData" data-page="3">加载第三页</button>

后端代码调用方式

  getData(e) {
    // console.log(e.currentTarget.dataset.page)
    let page = et.page.currentTarget.datase - 1
    console.log("计算以后的page", page)
  },

二,上拉触底函数onReachBottom

  • 该方法用来监听页面的上拉触底时间,属于小程序生命周期的一部分(具体讲解后续将在博客内更新)。

三,分页案例展示(分本地和云函数)可直接复制执行

  • 页面的分页加载本质上是通过limit()函数以及skip()函数的结合来实现

1.公用前端代码

**************************************************
<view wx:for="{{list}}" wx:key="index">//报黄
  <view class="num">{{item.num}}</view>
</view>

2.本地分页方式代码

Page({
  data: {
    list: [],//用来保存已经加载的数据,可自行优化
  },

  getData(e) {
    // console.log(e.currentTarget.dataset.page)
    let page = et.page.currentTarget.datase - 1 //同名函数调用方式,因为
    console.log("计算以后的page", page)
    this.getList()
  },

  getList() {
    wx.showLoading({ //设置加载中图标
      title: '加载中。。。。。',
    })
    console.log("当前list的长度", this.data.list.length)
    let len = this.data.list.length  //通过获取当前数组长度来确定跳过多少先前数据
    wx.cloud.database().collection("nums").skip(len).get()//此处可以通过limit函数设置每页返回的数据,默认不动就是本地最大限制20条
      .then(res => {
        wx.hideLoading() //加载完成后隐藏加载图标
        console.log("获取数据成功", res)
        if (res.data.length <= 0) {  //没有更多数据的友好提示
          wx.showToast({
            icon: "none",
            title: '没有更多数据了',
          })
        }
        this.setData({
          // list: res.data
          list: this.data.list.concat(res.data)//数组数据拼接,将新读取的数据与老数据进行拼接,保证前端数据的连续性,不至于有跳页的感受
        })
      })
      .catch(err => {
        wx.hideLoading() //加载完成后隐藏加载图标
        console.log("获取数据失败", err)
      })
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    this.getList()
  },


  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
    this.getList()
  },

})

3.云函数分页方式代码

  • 云函数主体
// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})

// 云函数入口函数
exports.main = async (event, context) => {
  return await cloud.database().collection("nums")
    .skip(event.len)//分页
    .limit(event.pageNum)//每页加载多少
    .get()
}
  • 调用代码
Page({
  data: {
    list: [],
  },

  getData(e) {
    // console.log(e.currentTarget.dataset.page)
    let page = e.currentTarget.dataset.page - 1
    console.log("计算以后的page", page)
    this.getList()
  },

  getList() {
    wx.showLoading({ //设置加载中图标
      title: '加载中。。。。。',
    })
    console.log("当前list的长度", this.data.list.length)
    let len = this.data.list.length

    //调用云函数
    wx.cloud.callFunction({
      name: "fenye",
      data: {
        pageNum: 30,//每页加载多少
        len: len,//分页用的
      }
    }).then(res => {
      wx.hideLoading() //加载完成后隐藏加载图标
      console.log("调用成功", res)
      if (res.result.data.length <= 0) {  //没有更多数据的友好提示
        wx.showToast({
          icon: "none",
          title: '没有更多数据了',
        })
      }
      this.setData({
        // list: res.data
        list: this.data.list.concat(res.result.data)
      })

    }).catch(err => {
      wx.hideLoading() //加载完成后隐藏加载图标
      console.log("调用失败", err)
    })


  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    this.getList(0)
  },


  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
    this.getList()
  },

})
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值