当前位置: 首页 > news >正文

uniapp下拉刷新+分页组件(z-paging 组件)

z-paging 组件使用文档

简介

z-paging 是一个功能强大的列表分页组件,支持下拉刷新、上拉加载更多、自动管理分页等功能。本文档将详细介绍如何在项目中使用 z-paging 组件,特别是如何实现列表与页面一起滑动的效果。

基本用法

1. 基础配置

<template><z-paging ref="paging" v-model="dataList" @query="queryList"><!-- 列表内容 --><view v-for="(item, index) in dataList" :key="index">{{ item.title }}</view></z-paging>
</template><script>
export default {data() {return {dataList: []}},methods: {queryList(pageNo, pageSize) {// 请求接口获取数据this.$api.getList({ pageNo, pageSize }).then(res => {// 将请求结果通过complete方法传给z-pagingthis.$refs.paging.complete(res.data.list);}).catch(e => {// 请求失败,调用fail方法this.$refs.paging.fail();})}}
}
</script>

2. 页面滚动模式

要实现列表与页面一起滑动,需要设置 use-page-scroll 属性为 true

<z-paging ref="paging" :use-page-scroll="true" v-model="dataList" @query="queryList"><!-- 列表内容 -->
</z-paging>

常用属性

属性名类型默认值说明
use-page-scrollBooleanfalse使用页面滚动,设为true时列表会和页面一起滑动
default-page-sizeNumber10默认每页数据量
autoBooleantrue是否自动调用查询接口
fixedBooleantrue是否使用fixed布局,若设置为false,则z-paging的父容器必须具有固定高度
safe-area-inset-bottomBooleanfalse是否开启底部安全区域适配
refresher-enabledBooleantrue是否开启自定义下拉刷新
loading-more-enabledBooleantrue是否开启加载更多功能
show-loading-more-no-more-viewBooleantrue是否显示没有更多数据的视图

常用方法

方法名参数说明
complete(dataList)请求结束(成功)调用此方法,将请求的结果传递给z-paging
completeByTotal(dataList, total)请求结束(成功)调用,将请求结果及总数传递给z-paging
reload()重新加载分页数据,pageNo会重置为1
refresh()触发下拉刷新
doLoadMore()手动触发上拉加载更多
scrollToTop(animate = true)滚动到顶部,animate为是否使用动画效果
fail()请求失败时调用此方法

常用事件

事件名参数说明
@query(pageNo, pageSize)列表需要请求数据时触发
@refresh()下拉刷新被触发
@load-more()上拉加载更多被触发

实现列表与页面一起滑动

要实现列表与页面一起滑动,同时保留加载更多功能,需要进行以下设置:

  1. 设置 use-page-scroll 属性为 true
  2. 移除容器的固定高度限制
  3. 确保父容器样式正确

示例代码

<template><view class="page-container"><z-paging ref="paging" :use-page-scroll="true":default-page-size="10":auto="true":safe-area-inset-bottom="true"v-model="dataList" @query="queryList"><!-- 列表内容 --><view class="list-container"><view class="list-item" v-for="(item, index) in dataList" :key="index">{{ item.title }}</view></view></z-paging></view>
</template><script>
export default {data() {return {dataList: []}},methods: {queryList(pageNo, pageSize) {// 模拟请求接口setTimeout(() => {const list = [];for (let i = 0; i < pageSize; i++) {const item = {id: (pageNo - 1) * pageSize + i + 1,title: `第${pageNo}页-第${i + 1}项`}list.push(item);}// 假设总数据量为50条const total = 50;this.$refs.paging.completeByTotal(list, total);}, 1000)}}
}
</script><style lang="scss" scoped>
.page-container {/* 不设置固定高度,允许内容随页面滚动 */width: 100%;position: relative;
}.list-container {padding: 10px;
}.list-item {background-color: #ffffff;padding: 15px;margin-bottom: 10px;border-radius: 5px;box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}
</style>

注意事项

  1. 使用 use-page-scroll="true" 时,需要在页面的 onPageScroll 生命周期中调用 updatePageScrollTop 方法:
onPageScroll(e) {this.$refs.paging.updatePageScrollTop(e.scrollTop);
}
  1. 使用页面滚动模式时,不要给容器设置固定高度,否则会影响滚动效果

  2. 如果有吸顶效果需求,可以配合 sticky 组件使用

  3. 在页面滚动模式下,如果有顶部或底部固定内容,需要设置适当的 padding 或 margin 避免内容被遮挡

高级用法

自定义下拉刷新样式

<z-paging ref="paging" v-model="dataList" @query="queryList"><template #refresher><view class="custom-refresher"><image class="refresh-icon" :src="refreshIcon" :style="{transform: `rotate(${refresherStatus * 30}deg)`}"></image><text>{{ refresherStatus === 1 ? '下拉刷新' : '释放更新' }}</text></view></template><!-- 列表内容 -->
</z-paging>

自定义空数据视图

<z-paging ref="paging" v-model="dataList" @query="queryList"><template #empty><view class="empty-view"><image src="/static/empty.png"></image><text>暂无数据</text><button @click="$refs.paging.reload()">重新加载</button></view></template><!-- 列表内容 -->
</z-paging>

聊天记录模式

<z-paging ref="paging" v-model="messageList" @query="queryMessageList" :use-chat-record-mode="true"><view class="chat-container"><view class="message-item" v-for="(item, index) in messageList" :key="index">{{ item.content }}</view></view>
</z-paging>

总结

z-paging 组件通过简单的配置即可实现列表的分页加载、下拉刷新和上拉加载更多功能。特别是通过设置 use-page-scroll="true" 属性,可以让列表与页面一起滑动,提升用户体验。在实际开发中,根据业务需求灵活配置各种属性,可以实现各种复杂的列表交互效果。

http://www.lryc.cn/news/582171.html

相关文章:

  • 2. 你可以说一下 http 版本的发展过程吗
  • 选择排序算法详解(含Python实现)
  • CentOS-7-x86_64解决:使用NAT模式无法ping通www.baidu.com或无法ping 8.8.8.8问题。
  • 阿里arthas(阿尔萨斯)简介
  • 安卓10.0系统修改定制化____recovery-from-boot.p文件的具体作用 在定制项目中的关联
  • v-for的用法及案例
  • 股票筹码分布及其数据获取
  • Swift 解 LeetCode 320:一行单词有多少种缩写可能?用回溯找全解
  • 深入解析TCP:可靠传输的核心机制与实现逻辑(三次握手、四次挥手、流量控制、滑动窗口、拥塞控制、慢启动、延时应答、面向字节流、粘包问题)
  • 沉浸式视频的未来:MV-HEVC与3D-HEVC技术深度解析
  • 【STM32】const 变量存储学习笔记
  • 6,Receiving Messages:@KafkaListener Annotation
  • 【网络】Linux 内核优化实战 - net.ipv4.ip_local_port_range
  • 【方案】前端UI布局的绝技,响应式布局,多端适配
  • 医疗AI底层能力全链条工程方案:从技术突破到临床落地
  • 如何排查服务器中已经存在的后门程序?
  • Java基础--封装+static
  • 软件工程功能点估算基础
  • 软件工程功能点估算法常用术语介绍
  • jmm-内存屏障
  • MMaDA:多模态大型扩散语言模型
  • 边缘计算新底座:基于VPP+DPDK的开放智能网关
  • kafka总结
  • AI + 数据治理的趋势:让治理更智能、更敏捷
  • Web Worker:让前端飞起来的隐形引擎
  • 七牛云Java开发面试题及参考答案(60道面试题汇总)
  • 【C语言】指针与回调机制学习笔记
  • 1-Kafka介绍及常见应用场景
  • CAIDCP AI驱动安全专家认证将于8月正式上线,首期班开始报名
  • c++-引用(包括完美转发,移动构造,万能引用)