微信小程序 - 自定义实现分页功能

概述

  • 在微信小程序项目中,没有现成的分页器组件,所以需要自定义实现分页功能

自定义实现分页功能

1、index.json
json 复制代码
{
	"usingComponents": {
		"van-button": "@vant/weapp/button/index"
	}
}
  • 这里使用 Vant Weapp 中的 van-button 组件,所以需要额外引入 Vant Weapp(当然,也可以使用微信小程序按钮组件)

  • Vant Weapp 官网地址:https://vant-ui.github.io/vant-weapp/#/quickstart

  1. 安装 Vant Weapp:npm i @vant/weapp -S --production

  2. 修改 app.json:将 app.json 中的 "style": "v2" 去除

  3. 点击 【工具】 -> 点击 【构建 npm】

2、index.wxml
html 复制代码
<view class="pagination">
    <van-button type="primary" size="small" bind:click="handlePrevPage" disabled="{{pageNum === 1}}">
        上一页
    </van-button>
    <text class="page-info">{{pageNum}} / {{pageTotal}}</text>
    <van-button type="primary" size="small" bind:click="handleNextPage" disabled="{{pageNum === pageTotal}}">
        下一页
    </van-button>
</view>
  • 分页器由一个容器(view)、两个按钮(van-button)、一个页码信息(text)组成
(1)上一页按钮
  1. bind:click="handlePrevPage" 点击时触发 handlePrevPage 方法

  2. disabled="{``{pageNum === 1}}" 当当前页码(pageNum)为 1 时,上一页按钮禁用

(2)下一页按钮
  1. bind:click="handleNextPage" 点击时触发 handleNextPage 方法

  2. disabled="{``{pageNum === pageTotal}}" 当当前页码(pageNum)等于总页数(pageTotal)时,下一页按钮禁用

(3)页码信息
  • {``{pageNum}} / {``{pageTotal}} 显示当前页码与总页数
3、index.wxss
css 复制代码
.pagination {
	margin-top: 20px;
	display: flex;
	justify-content: center;
	align-items: center;
}

.page-info {
	margin: 0 20px;
	font-size: 14px;
	color: #333;
}
4、index.ts
ts 复制代码
Page({
	data: {
		pageNum: 1,
		pageSize: 5,
		pageTotal: 1,
		total: 0,
		records: [],
	},
    
    getRecords() {
        ...
    },
    
	handlePrevPage() {
		if (this.data.pageNum === 1) {
			wx.showToast({
				title: "已经是第一页了",
				icon: "none",
			});
			return;
		}
		this.setData({ pageNum: this.data.pageNum - 1 });
		this.getRecords();
	},

	handleNextPage() {
		if (this.data.pageNum === this.data.pageTotal) {
			wx.showToast({
				title: "已经是最后一页了",
				icon: "none",
			});
			return;
		}
		this.setData({ pageNum: this.data.pageNum + 1 });
		this.getRecords();
	},
});
(1)数据字段
数据字段 说明
pageNum 当前页码
pageSize 每页显示的条数
pageTotal 总页数
total 总条数
records 当前页的数据列表
(2)getRecords 方法
  1. 占位方法,实际逻辑需要根据业务需求实现

  2. 需要通过接口请求数据,并根据 pageNum 和 pageSize 参数获取对应页的数据

(3)handlePrevPage 方法
  1. 首先检查当前页码是否为 1,如果是,则提示用户"已经是第一页了"

  2. 如果当前页码大于 1,则将 pageNum 减 1,并调用 getRecords 方法加载上一页的数据

(4)handleNextPage 方法
  1. 首先检查当前页码是否等于总页数,如果是,则提示用户"已经是最后一页了"

  2. 如果当前页码小于总页数,则将 pageNum 加 1,并调用 getRecords 方法加载下一页的数据

相关推荐
weixin_431600442 小时前
前端数据埋点(1):一次点击如何变成一条埋点
前端·js·数据埋点
IT_陈寒2 小时前
Python线程池吞了异常还不告诉我,这谁顶得住啊
前端·人工智能·后端
计算机魔术师3 小时前
同样是AI辅助建造,为什么有的游戏三个月就烂尾了?
前端
用户921080262863 小时前
0. 做 Agent 产品,前端 AI 组件框架怎么选?
前端
拾年2754 小时前
React Hooks 进阶篇:useMemo / useCallback / useReducer / useImperativeHandle,用「算账 +
前端·javascript·react.js
Jackson__4 小时前
面试官:如何在老项目中使用新框架,并实现通信?
前端·javascript·面试
拾年2754 小时前
React Hooks 保姆级教程:把组件想象成失忆的打工人,4 个 Hook 带你原地起飞
前端·javascript·react.js
mmsx4 小时前
一个 Bug 修了 12 轮,根因只有一句话:AI 编程时代,日志才是唯一的真相
前端
默_笙4 小时前
😝 5 亿次循环卡死页面?我用 Web Worker 把它扔进后台线程,页面丝滑如初
前端·javascript
CAD老兵4 小时前
一行代码集成 DWG/DXF 图纸查看:测量批注,数据不出站
前端·javascript·github