尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

uni-app x实现上下拉动,动态加载数据
📅 发布时间:2026/6/18 7:31:21

一、概述

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

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

效果如下:

动画

二、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,用来刷新结束通知

 

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

动画

 

相关新闻

  • 企业微信ipad协议稳定防封的最新最全功能
  • 企业微信协议ipad,稳定防封私有化部署私域流量聚合聊天,机器人实现方案
  • 重新思考钓鱼攻击意识培训:网络安全的关键反思

最新新闻

  • ATM网络OAM机制深度解析:从AIS/RDI信元到硬件性能监控实战
  • 深入解析NXP MCU Bootloader与blhost工具:从原理到高级应用实践
  • 医疗AI落地两大硬坎:临床信任断裂与数据合规失焦
  • Adaboost原理深度解析:理解梯度提升家族的基石
  • 股市语言密码:看懂全球资本流动的翻译之道
  • 终极指南:如何为300+车型部署开源驾驶辅助系统openpilot

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号