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

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

一、概述

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

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

效果如下:

动画

二、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.hskmm.com/?act=detail&tid=33180

相关文章:

  • HyperWorks许可状态监控工具
  • mysql删除数据表某个日期之前的数据
  • KMP算法
  • 企业微信ipad协议稳定防封的最新最全功能
  • 企业微信协议ipad,稳定防封私有化部署私域流量聚合聊天,机器人实现方案
  • 重新思考钓鱼攻击意识培训:网络安全的关键反思
  • 任务分解与小模型如何降低AI成本
  • spring事件监听的核心机制
  • 直播软件开发搭建公司
  • freeswitch的proxy_media模式下video流的问题与修正
  • DNS 相关
  • 2025 年无锡专线物流公司最新推荐排行榜:聚焦个性化运输解决方案,精选优质服务商往返无锡/冷链无锡/公路无锡/大件无锡专线物流公司推荐
  • Dubbo入门-通过spring-boot来动手实践
  • 使用ceph rdb做k8s后端存储(ceph-csi storageclass
  • 2025 最新火烧板源头厂家推荐排行榜:自有矿山加持 + 品质卓越,芝麻灰 / 五莲花等石材采购优选指南
  • 【IEEE出版、吉首大学主办】第二届智能机器人与自动控制国际学术会议 (IRAC 2025)
  • 第三次课动手动脑合集
  • 2025 年火山石厂家最新推荐排行榜:聚焦自有矿藏与全自动生产,涵盖滤料填料等多品类企业权威指南人工湿地填料/人工湿地滤料/黑色/红色火山石厂家推荐
  • 【SPIE出版、往届已检索】第十届能源系统、电气与电力国际学术会议 (ESEP 2025)
  • 2025 防火隔断厂家最新推荐排行榜:甲级防火玻璃隔断厂家深度测评,精选优质品牌助力采购决策
  • 作业3
  • 2025-10-17
  • 2025 年最新推荐!国内优质球墨铸铁管厂家排行榜,涵盖市政 / 给水 / 水利工程用管,助力采购高效选材
  • Nexpose 8.24.0 for Linux Windows - 漏洞扫描
  • 用于博客美化的测试(后面再更新)
  • 2025 年最新留学中介机构推荐排行榜:覆盖英美澳加新等热门地,专业团队护航学子海外深造之选
  • 有趣评测小程序系统:开启视频与答题变现新创业风口
  • 看图猜成语达人小程序:一站式趣味与变现解决方案
  • Metasploit Pro 4.22.8-20251014 (Linux, Windows) - 专业渗透测试框架
  • 设备租赁归还小程序系统:免人工化租赁管理解决方案