uni-app x实现上下拉动,动态加载数据

news/2025/10/18 23:55:25/文章来源:https://www.cnblogs.com/xiao987334176/p/19147734

一、概述

上一篇文章,已经实现了商品列表组件封装以及使用。

但是商品列表页面,还需要实现,上下拉动,动态加载数据。

效果如下:

动画

二、onReachBottom

onReachBottom是微信小程序页面生命周期中的回调函数,用于检测页面是否滚动到最底部,并在触底时触发加载更多内容。

修改 pages/goods/goods.uvue文件

在methods:{}下面,增加onReachBottom

onReachBottom() {uni.showToast({title: '到底啦,没有更多内容啦'});
}

编译代码,重新运行,直接拉到最下面,就会出现提示,效果如下:

image

三、滑动加载

修改 pages/goods/goods.uvue文件,增加分页判断

完整代码如下:

<template><view class="goods_list"><GoodsList :goods="goods"></GoodsList><view class="is_over" v-if="flag">---我是有底线的---</view></view>
</template><script>import GoodsList from '../../components/goods-list/goods-list.uvue'export default {components: {GoodsList: GoodsList},data() {return {goods: [],pageindex: 1,flag: false}},onLoad() {this.get_goods()},methods: {// 获取商品列表数据
            async get_goods() {try {const res = await this.$http.get('/api/getgoods?pageindex=' + this.pageindex, {})// console.log("res", res)// this.goods = res.messagethis.goods = [...this.goods, ...res.message]} catch (err : any) {uni.showToast({title: '获取商品列表失败' + err.statusCode,});}},},onReachBottom() {// 判断最后一页if (this.goods.length < this.pageindex * 10) {this.flag = true// uni.showToast({//     title: '到底啦,没有更多内容啦'// });return false} else {// 获取下一页数据this.pageindex++this.get_goods()}}}
</script><style lang="scss">.goods_list {background: #eee;}.is_over {width: 100%;height: 50px;line-height: 50px;text-align: center;font-size: 28rpx;}
</style>

代码说明:

<template>,新增了一个view,用来提醒用户,到底了,已经是显示最后一页。

this.goods = [...this.goods, ...res.message],把已有的 this.goods 数组和 res.message 数组合并成一个新的数组,然后重新赋值给 this.goods

什么意思呢,就是第1页时,this.goods有10条数据,第2页时,this.goods有20条数据,依次类推。

 

this.goods.length < this.pageindex * 10,这个判断条件,需要重点讲一下,有点不太好理解。

就如上面所说,每次滑动,分页数会一直加。那么this.goods的数据量就会变成,10,20,30等等。

但是到了最后一页呢,可能是43,51,69这种,非10整除的数量。

那么,当数据量,不能被10整除时,也就是到了最后一页了。 所以判断条件这里,用的是this.goods.length < this.pageindex * 10

 

编译代码,效果如下:

 动画

 四、下拉刷新

onPullDownRefresh

onPullDownRefresh 是微信小程序和 uni-app中实现下拉刷新的页面事件处理函数,用于监听用户下拉操作并触发数据刷新逻辑。

基础配置

1. 开启下拉刷新‌:在页面配置文件pages.json中添加 "enablePullDownRefresh":true

修改pages.json,只需要修改goods的配置

{"path": "pages/goods/goods","style": {"navigationBarTitleText": "商品列表","enablePullDownRefresh": true}
},

 

2‌.处理函数定义‌:在页面逻辑层(如 Page 对象中)定义 onPullDownRefresh 函数,实现刷新逻辑。 ‌

修改 pages/goods/goods.uvue文件,在onReachBottom(){},下面新增一个函数

onPullDownRefresh() {console.log("下拉刷新了")this.pageindex = 1this.goods = []this.flag = falsethis.get_goods()
}

编译代码,重新运行。

从商品列表,向下拉,就会出现一个转圈的图标

image

 但是有一个问题,这个转圈的图标,一直无法消失。

还需要调用uni.stopPullDownRefresh(),来处理图标,不显示。

那么什么时候调用呢?当然是调用api接口成功了,再调用。

 

再次修改 pages/goods/goods.uvue文件

完整代码如下:

<template><view class="goods_list"><GoodsList :goods="goods"></GoodsList><view class="is_over" v-if="flag">---我是有底线的---</view></view>
</template><script>import GoodsList from '../../components/goods-list/goods-list.uvue'export default {components: {GoodsList: GoodsList},data() {return {goods: [],pageindex: 1,flag: false}},onLoad() {this.get_goods()},methods: {// 获取商品列表数据
            async get_goods(callBack) {try {const res = await this.$http.get('/api/getgoods?pageindex=' + this.pageindex, {})// console.log("res", res)// this.goods = res.messagethis.goods = [...this.goods, ...res.message]// callBack && callBack()if (callBack) {callBack();}} catch (err : any) {uni.showToast({title: '获取商品列表失败' + err.statusCode,});}},},onReachBottom() {// 判断最后一页if (this.goods.length < this.pageindex * 10) {this.flag = true// uni.showToast({//     title: '到底啦,没有更多内容啦'// });return false} else {// 获取下一页数据this.pageindex++this.get_goods()}},onPullDownRefresh() {console.log("下拉刷新了")this.pageindex = 1this.goods = []this.flag = falsesetTimeout(() => {this.get_goods(() => {uni.stopPullDownRefresh()})}, 1000)}}
</script><style lang="scss">.goods_list {background: #eee;}.is_over {width: 100%;height: 50px;line-height: 50px;text-align: center;font-size: 28rpx;}
</style>

代码解释:

在onPullDownRefresh里面,定义了一个延迟执行代码的函数,1秒后,执行get_goods方法,执行成功后,再执行uni.stopPullDownRefresh(),用来关闭转圈的图标。

在get_goods里面,定义了一个callBack,这里面做了一个if判断。

当onLoad(){}里面执行get_goods方法时,直接跳过if判断。但是当onPullDownRefresh里面的延迟执行函数,执行get_goods,就会调用callBack,用来刷新结束通知

 

重新编译代码,效果如下:

动画

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/939085.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HyperWorks许可状态监控工具

在现今日益复杂的工程设计与仿真环境中,对软件许可状态的有效监控已成为确保工作流程顺畅、资源高效利用的关键。为了满足这一需求,HyperWorks推出了强大的许可状态监控工具,帮助用户实时了解许可使用情况,优化资源…

mysql删除数据表某个日期之前的数据

DELETE FROM 表名WHERE 时间字段名称 < 2025-09-28 00:00:00; (如果是时间戳就填时间戳数字)每天进步一点点

从创作到分析:2025 公众号排版工具全维度测评榜单

从创作到分析:2025 公众号排版工具全维度测评榜单2025公众号工具测评:壹伴AI编辑器全链路优势深度解析 作为新媒体运营者,你是否常陷入这些困境:熬夜赶稿后排版格式反复出错,跨平台分发时样式全乱;拟标题时反复修…

企业微信ipad协议稳定防封的最新最全功能

企业微信ipad协议稳定防封的最新最全功能免费试用&&技术支持: const wx="mff031829" 企业微信ipad的技术特点:多端共存:iPad 协议独立运行,不影响 PC 端和手机端的登录状态,实现三端同步在线。…

企业微信协议ipad,稳定防封私有化部署私域流量聚合聊天,机器人实现方案

企业微信协议ipad,稳定防封私有化部署私域流量聚合聊天,机器人实现方案企业微信iPad协议是一种基于企业微信iPad版本的智能接口服务,通过API接口,企业可以实现对客户群的精细化管理和高效营销。以下是关于企业微信…

重新思考钓鱼攻击意识培训:网络安全的关键反思

本文探讨了钓鱼攻击意识培训的有效性与潜在风险,分析了当前企业安全培训中存在的误区,并提出了构建更有效网络安全防护体系的具体建议。在MGM事件发生后,我认为这是讨论钓鱼攻击意识的好时机。 据传闻,攻击者能够冒…

任务分解与小模型如何降低AI成本

本文探讨如何通过任务分解和使用小型专用语言模型替代单一大型模型来降低AI应用成本,分析系统复杂度与性能间的平衡,并展示个性化网站生成的具体案例。任务分解与小型语言模型如何让AI更经济 生成式AI应用的广泛使用…

spring事件监听的核心机制

spring事件监听的核心机制Spring 事件监听机制的核心是基于观察者模式(Observer Pattern) 实现的组件间解耦通信机制,通过事件(Event)、监听器(Listener)、事件发布者(Publisher) 三者的协作,实现 “发布 - …

直播软件开发搭建公司

作为专ye的直播软件开发公司,山东(泰安)布谷鸟网络科技有限公司深耕直播软件开发和搭建业务,致力于为客户提供稳定、高效的直播解决方案,推出布谷直播源码,满足不同业务场景的定制需求。本文将从多个角度解析直播软…

freeswitch的proxy_media模式下video流的问题与修正

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 测试过程中发现fs的proxy_media模式的一个bug,就是video媒体流的转发处理有问题。 环境 CentOS 7.9 freeswitch 1.6.20 问题 fs配置为proxy_media模式,A路发起…

DNS 相关

dig 使用 背景 example.com 是一个公网注册的域名,在阿里云配置权威DNS解析,本地内网服务器也搭建了一个bind server同样配置了example.com的zone解析该域名,本地所有ECS的/etc/resolv.conf 配置的 nameserver为 10…

2025 年无锡专线物流公司最新推荐排行榜:聚焦个性化运输解决方案,精选优质服务商往返无锡/冷链无锡/公路无锡/大件无锡专线物流公司推荐

当前工业生产节奏持续加快,无锡地区企业对专线物流定制服务的需求愈发多样化、精细化,涵盖往返运输、冷链配送、大件机械运输等多个细分场景。然而,物流市场中企业资质、服务能力参差不齐,部分服务商存在定制方案不…

Dubbo入门-通过spring-boot来动手实践

第一种--快速创建应用 可以直接下载示例项目,链接:https://github.com/apache/dubbo-samples/tree/master/11-quickstart 第二种--新建项目 新建 Java 空白 Maven 项目jdk17之后我们还需要创建 dubbo-spring-boot-de…

使用ceph rdb做k8s后端存储(ceph-csi storageclass

环境:Os:Centos 7k8s:v1.28 ceph:14.2.22###############################################ceph端分配存储##############################1.分配osd pool和创建用户[root@master tmp]#ceph osd pool create dynamics-…

2025 最新火烧板源头厂家推荐排行榜:自有矿山加持 + 品质卓越,芝麻灰 / 五莲花等石材采购优选指南

当前火烧板市场面临多重采购困境:部分厂家缩减生产流程导致产品色泽不均、质地松软,难以适配建筑与装修行业的高品质需求;多数中小型商家缺乏自有矿山,原材料依赖外购,常因供应中断或品质波动延误工程进度;加工精…

【IEEE出版、吉首大学主办】第二届智能机器人与自动控制国际学术会议 (IRAC 2025)

第二届智能机器人与自动控制国际学术会议 (IRAC 2025) 2025 2nd International Conference on Intelligent Robotics and Automatic Control 在这里看会议官网详情 中国-吉首 | 2025年11月28日-30日 收录类型:IEEE …

第三次课动手动脑合集

链接:https://files.cnblogs.com/files/blogs/847696/动手动脑3.zip?t=1760694634&download=true编译错误的原因是:在Test类的main方法中,尝试创建Foo类的对象obj1时,没有传递任何参数。但Foo类定义了一个带参…

2025 年火山石厂家最新推荐排行榜:聚焦自有矿藏与全自动生产,涵盖滤料填料等多品类企业权威指南人工湿地填料/人工湿地滤料/黑色/红色火山石厂家推荐

当前火山石应用已广泛覆盖污水处理、人工湿地、园林造景等多个领域,市场需求持续攀升,但采购端却面临诸多困境。不少采购方因缺乏专业判断,难以辨别厂家资质,常遭遇原料不稳定导致的产品性能波动、生产设备落后引发…

mysql5.7.44升级到8.0.34 mysql跨版本升级实战操作 windows环境

mysql5.7.44升级到8.0.34 mysql跨版本升级实战操作 windows环境背景 服务器当前数据库版本为mysql5.7.22 通过小版本直接升级到mysql5.7.44 (5.7.44是当前大版本最新状态);然后我们通过mysql5.7.44 可直接升级到my…

【SPIE出版、往届已检索】第十届能源系统、电气与电力国际学术会议 (ESEP 2025)

ESEP 2025已通过SPIE - The International Society for Optical Engineering (ISSN: 0277-786X)出版审核,EI 见刊检索稳定! 第十届能源系统、电气与电力国际学术会议 (ESEP 2025) 2025 10th International Conferenc…