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

概述

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

自定义实现分页功能

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 方法加载下一页的数据

相关推荐
祈澈菇凉7 分钟前
webpack和grunt以及gulp有什么不同?
前端·webpack·gulp
zy01010115 分钟前
HTML列表,表格和表单
前端·html
初辰ge17 分钟前
【p-camera-h5】 一款开箱即用的H5相机插件,支持拍照、录像、动态水印与样式高度定制化。
前端·相机
HugeYLH32 分钟前
解决npm问题:错误的代理设置
前端·npm·node.js
六个点1 小时前
DNS与获取页面白屏时间
前端·面试·dns
道不尽世间的沧桑1 小时前
第9篇:插槽(Slots)的使用
前端·javascript·vue.js
bin91531 小时前
DeepSeek 助力 Vue 开发:打造丝滑的滑块(Slider)
前端·javascript·vue.js·前端框架·ecmascript·deepseek
uhakadotcom2 小时前
最新发布的Tailwind CSS v4.0提供了什么新能力?
前端
GISer_Jing2 小时前
Node.js中如何修改全局变量的几种方式
前端·javascript·node.js
秋意钟2 小时前
Element UI日期选择器默认显示1970年解决方案
前端·javascript·vue.js·elementui