更新记录

1.0.0(2026-11-12) 下载此版本

首发版本,功能对齐 z-paging 2.8.8。

新增

  • 全自动分页管理:@query + complete 系列方法,pageNo/pageSize 自动计算
  • 自定义下拉刷新:default/release-to-refresh/loading/complete 状态机、增量阻尼算法、角度限制、松手吸附与回弹动画、震动、最后更新时间
  • 底部加载更多:default/loading/no-more/fail 四态、flower/circle 双图标、no-more 分割线、hideNoMoreInside/hideNoMoreByLimit/insideMore
  • 空数据图:空数据/加载失败双态、重新加载按钮、slot 自定义
  • 虚拟列表:fixed/dynamic 高度双模式(前缀和算法)、多列、预加载
  • 聊天记录模式:scaleY(-1) 双重倒置、顶部加载更多、键盘适配
  • 本地分页 setLocalPaging
  • 列表缓存 useCache/cacheKey/cacheMode
  • 国际化:zh-Hans/zh-Hant/en,全部文案 props 支持 i18n 对象写法
  • 下拉进入二楼(F2)
  • 返回顶部按钮、scrollToXXX 方法族、页面滚动模式
  • slot 体系:default/top/bottom/left/right/refresher/refresherComplete/loadingMore×4/empty/loading/backToTop/cell/header/footer/chatLoading/chatNoMore/f2
  • 全局配置(config + uni.$antPaging.config)与拦截器(query/fetch/language)
  • 蒸汽模式(Vapor)兼容:全组合式 API、BEM 简单 class 选择器、无 wxs/renderjs,可运行于 uni-app x 蒸汽模式工程

与 z-paging 的差异

  • 仅支持 vue3 组合式(不支持 vue2、不支持 nvue 渲染分支)
  • 下拉刷新统一走 js touch 处理(不使用 wxs/renderjs,保证蒸汽模式与全平台一致性)

平台兼容性

uni-app(5.34)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
- √ √ √ √ - √ √ √
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
√ √ √ √ √ - - √ √ - - -

其他

多语言 暗黑模式 宽屏模式 蒸汽模式
√ √ × ×

ant-paging 分页组件

ant-paging 是一个高性能全平台分页组件,功能与 z-paging 2.8.8(MIT 开源)一比一对齐,并在此基础上:

  • ✅ 支持蒸汽模式(uni-app x Vapor,去虚拟 DOM 渲染引擎,HBuilderX 5.0+ 鸿蒙 / 5.11+ iOS / 5.21+ Android)
  • ✅ 支持 App(鸿蒙/Android/iOS)、小程序(微信/支付宝/抖音/百度/QQ 等)、H5
  • ✅ 全部采用 Vue3 组合式 API(<script setup>)+ BEM 简单 class 选择器编写,一份代码同时运行于普通 uni-app 与 uni-app x 蒸汽模式

快速上手

两步接入:绑定 v-model 列表 + 绑定 @query 请求方法:

<template>
    <ant-paging ref="paging" v-model="dataList" @query="queryList">
        <view v-for="(item, index) in dataList" :key="index">
            <text>{{ item.title }}</text>
        </view>
    </ant-paging>
</template>

<script setup>
import { ref } from 'vue'
const paging = ref(null)
const dataList = ref([])

const queryList = (pageNo, pageSize) => {
    // 此处请求服务器
    setTimeout(() => {
        const list = []
        for (let i = 0; i < pageSize; i++) {
            list.push({ title: `第${pageNo}页 第${i + 1}条` })
        }
        paging.value.complete(list)
    }, 500)
}
</script>

自定义下拉刷新图标(含 loading 图标)

四个状态图标均可自定义(传图片 url 或 base64):

Prop 状态 默认
refresher-default-img 继续下拉刷新(箭头朝下) 内置箭头
refresher-pulling-img 松手立即刷新(未设置时回落 default-img) 内置箭头
refresher-refreshing-img 刷新中(loading图标) 内置菊花
refresher-complete-img 刷新成功 内置对勾

配套控制:

  • refresher-img-style:图标尺寸/边距,如 :refresher-img-style="{ width: '40rpx', height: '40rpx' }"
  • :refresher-refreshing-animated="true":loading 图标是否旋转(默认 true;自定义图标为平滑旋转,内置菊花为模拟系统逐帧动效)
<ant-paging refresher-refreshing-text="正在刷新..."
    :refresher-refreshing-img="myLoadingIcon"
    :refresher-img-style="{ width: '40rpx', height: '40rpx' }" ... />

更彻底的自定义(文字+图标整体布局、lottie 等)请使用 slot="refresher"(作用域参数 refresherStatus),注意 slot 会整体替换默认刷新视图,与图片级自定义互斥。演示见 pages/paging/custom.vue。

蒸汽模式(Vapor)接入

  1. 使用 HBuilderX(5.0+)打开 uni-app x 工程
  2. manifest.json 可视化界面勾选蒸汽模式
  3. 将 uni_modules/ant-paging 复制到工程 uni_modules 目录
  4. 页面中直接使用 <ant-paging>(蒸汽模式支持弱类型 js 组件,本组件已按蒸汽模式约束编写:组合式 API / 简单 class 选择器 / 无 wxs / 样式隔离 2.0)

已验证

  • HBuilderX 5.34 + 鸿蒙蒸汽目标编译通过(view.render compile target: nativecode),组件产物含 libentry.so 原生引用
  • 编译验证工程见宿主项目 test/vapor-verify/(含 CLI 编译命令与开关说明)
  • 已处理的蒸汽 CSS 兼容点:vh 单位(uvue 不支持)、animation steps()(APP 下降级 linear)——均通过条件编译,不影响 H5/小程序

核心功能

功能 说明
分页全自动管理 page 中无需定义分页变量,绑定网络请求方法和分页结果数组即可
自定义下拉刷新 default/release-to-refresh/loading/complete 全状态机,阻尼/角度限制/回弹动画/震动/最后更新时间
底部加载更多 四态视图、flower/circle 图标、no-more 分割线、hideNoMoreInside、insideMore
空数据图 空数据/加载失败自动切换、重新加载按钮、slot 自定义
虚拟列表 fixed/dynamic 双高度模式(前缀和算法),支持万级数据
聊天记录模式 无闪动聊天分页(scaleY(-1) 倒置),键盘自动适配
本地分页 setLocalPaging 一次传入全量数据,内部自动分页
缓存 首页数据本地缓存,秒开
国际化 zh-Hans / zh-Hant / en,全部文案可覆盖
下拉进入二楼 refresherF2Enabled + slot="f2"
返回顶部 auto-show-back-to-top
页面滚动 use-page-scroll + useAntPaging hook

主要 API(对照 z-paging)

Props(180+,与 z-paging 同名同义)

常用:

Prop 说明 默认值
v-model 分页数据数组 []
defaultPageNo 初始页码 1
defaultPageSize 每页条数 10
auto mounted 后自动调用 reload true
fixed 是否 fixed 布局 true
refresherEnabled 开启下拉刷新 true
refresherThreshold 下拉刷新阈值 80rpx
loadingMoreEnabled 开启上拉加载更多 true
useVirtualList 虚拟列表 false
useChatRecordMode 聊天记录模式 false
usePageScroll 页面滚动模式 false
hideEmptyView 隐藏空数据图 false
showRefresherUpdateTime 显示最后更新时间 false

完整 props 请参考源码 components/ant-paging/js/ant-paging-props.js(与 z-paging 文档一比一对齐)。

Events(30+)

事件 说明
@query (pageNo, pageSize, from) 下拉刷新或加载更多自动触发
@listChange / @update:list 列表数据改变
@refresherStatusChange 下拉刷新状态改变
@loadingStatusChange 加载更多状态改变
@isLoadFailedChange 请求失败状态改变
@scroll / @scrolltolower / @scrolltoupper 滚动事件透传
@emptyViewReload 点击空数据图重新加载(可拦截)
@backToTopClick 点击返回顶部(可拦截)
@virtualListChange 虚拟列表渲染切片改变
@keyboardHeightChange 聊天模式键盘高度改变

Methods(40+,通过 ref 调用)

方法 说明
reload(animate) 重新加载,pageNo 重置
refresh() 刷新当前页数据
refreshToPage(page) 刷新至指定页
complete(data, success) 请求结束(数组长度 < pageSize 自动判定无更多)
completeByTotal(data, total) 通过 total 判定无更多并截断
completeByNoMore(data, noMore) 自行判定无更多
completeByKey(data, key) dataKey 一致性校验
completeByError(msg) 请求失败并传入原因
clear() 清空数据
setLocalPaging(data) 本地分页
addDataFromTop(data) 顶部插入数据
scrollToTop / scrollToBottom 滚动到顶/底
scrollIntoViewById(id) 滚动到指定元素
goF2() / closeF2() 进入/关闭二楼
endRefresh() 终止下拉刷新状态
doLoadMore() 手动触发加载更多(页面滚动 onReachBottom 中调用)
addChatRecordData(data) 添加聊天记录
updateCache() 手动更新缓存

Slots(20 个)

default / top / bottom / left / right / refresher(作用域:refresherStatus)/ refresherComplete / refresherF2 / f2 / loadingMoreDefault / loadingMoreLoading / loadingMoreNoMore / loadingMoreFail / empty(作用域:isLoadFailed)/ loading / backToTop / cell(作用域:item, index)/ header / footer / chatLoading / chatNoMore

页面滚动模式

use-page-scroll 时在页面 setup 中调用一次 useAntPaging(内部自动注册 onPageScroll / onReachBottom / onPullDownRefresh 并转发给组件):

<template>
    <ant-paging ref="paging" v-model="dataList" use-page-scroll @query="queryList">...</ant-paging>
</template>
<script setup>
import { ref } from 'vue'
import { useAntPaging } from '@/uni_modules/ant-paging/components/ant-paging/js/modules/use-ant-paging.js'
const paging = ref(null)
useAntPaging(paging)
</script>

全局配置

// main.js
uni.$antPaging = {
    config: {
        defaultPageSize: 20,
        auto: false
    }
}

或修改 components/ant-paging/js/ant-paging-config.js。

拦截器

uni.$antPagingInterceptor = null // 见 js/ant-paging-interceptor.js
// 在 App.vue / main.js:
import interceptor from '@/uni_modules/ant-paging/components/ant-paging/js/ant-paging-interceptor.js'
interceptor.handleQuery((pageNo, pageSize, from) => [pageNo, pageSize, from])

与 z-paging 的差异

项 z-paging ant-paging
API 风格 选项式 + mixin 组合式 <script setup>
vue2 支持 不支持
nvue 支持 不支持(保留 props 定义)
wxs/renderjs 支持(微信/QQ/H5/App) 不使用(js touch 全平台一致)
蒸汽模式 ❌ ✅
微信小程序下拉跟手性 wxs 丝滑 js 通信略有延迟(功能一致)

平台兼容

端 支持
H5 ✅
微信/支付宝/抖音/百度/QQ/快手小程序 ✅
App-Android(含蒸汽模式 5.21+) ✅
App-iOS(含蒸汽模式 5.11+) ✅
App-鸿蒙(含蒸汽模式 5.0+) ✅
uni-app x 蒸汽模式 ✅

许可

MIT。组件视觉素材(base64 图标)复用自 MIT 开源的 z-paging。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

无

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

无

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无

许可协议

MIT协议

暂无用户评论。