小程序模板:专业的小程序模板与静态模板分享平台
小程序
教程
搜索
当前位置 : 首页> 小程序教程> 微信小程序分页加载功能

微信小程序分页加载功能

在微信小程序中,实现分页加载功能通常涉及到以下几个步骤:

定义分页参数:在请求数据时,通常需要设置当前页码和每页的数据量。

请求数据:根据当前的分页参数发起请求。

更新数据:将请求返回的数据追加到已有的数据中。

处理分页状态:如是否还有更多数据等。

下面是一个简单的示例,演示如何在微信小程序中实现分页加载功能。


1.封装请求模块

// utils/request.js
function request(options) {
  const defaultOptions = {
    url: '', // 必填项,接口地址
    method: 'GET', // 默认 GET 方法
    data: {}, // 请求参数
    header: {
      'Content-Type': 'application/json',
    },
    timeout: 10000, // 请求超时时间,单位毫秒
    success: () => {},
    fail: () => {},
    complete: () => {}
  };

  const finalOptions = { ...defaultOptions, ...options };

  return new Promise((resolve, reject) => {
    wx.request({
      url: finalOptions.url,
      method: finalOptions.method,
      data: finalOptions.data,
      header: finalOptions.header,
      timeout: finalOptions.timeout,
      success: (res) => {
        if (res.statusCode >= 200 && res.statusCode < 300) {
          finalOptions.success(res.data);
          resolve(res.data);
        } else {
          finalOptions.fail(res);
          reject(res);
        }
      },
      fail: (err) => {
        finalOptions.fail(err);
        reject(err);
      },
      complete: () => {
        finalOptions.complete();
      }
    });
  });
}

module.exports = { request };


2. 实现分页加载功能

// pages/index/index.js
const { request } = require('../../utils/request');

Page({
  data: {
    items: [], // 存放加载的数据
    page: 1, // 当前页码
    pageSize: 10, // 每页数据量
    hasMore: true, // 是否还有更多数据
    loading: false // 请求数据中状态
  },

  onLoad: function () {
    this.loadData(); // 初次加载数据
  },

  // 加载数据
  loadData: function () {
    if (this.data.loading || !this.data.hasMore) return; // 避免重复请求或无更多数据

    this.setData({ loading: true }); // 设置加载中状态

    request({
      url: 'https://example.com/api/items',
      method: 'GET',
      data: {
        page: this.data.page,
        pageSize: this.data.pageSize
      },
      success: (data) => {
        if (data.items.length > 0) {
          this.setData({
            items: [...this.data.items, ...data.items], // 追加新数据
            page: this.data.page + 1 // 更新页码
          });
        } else {
          this.setData({
            hasMore: false // 没有更多数据
          });
        }
      },
      fail: (error) => {
        console.error('数据加载失败', error);
      },
      complete: () => {
        this.setData({ loading: false }); // 重置加载状态
      }
    });
  },

  // 下拉刷新
  onPullDownRefresh: function () {
    this.setData({
      items: [], // 清空数据
      page: 1, // 重置页码
      hasMore: true // 重置是否有更多数据标志
    }, () => {
      this.loadData(); // 重新加载数据
      wx.stopPullDownRefresh(); // 停止下拉刷新动画
    });
  },

  // 上拉加载更多
  onReachBottom: function () {
    this.loadData(); // 加载更多数据
  }
});


3. 接口返回数据示例

确保你的接口返回的数据格式符合分页加载的需求,例如:

{
  "items": [
    { "id": 1, "name": "Item 1" },
    { "id": 2, "name": "Item 2" }
    // ...
  ],
  "total": 100 // 数据总量(可选)
}


联系客服 意见反馈

签到成功!

已连续签到1天,签到3天将获得积分VIP1天

知道了