uniapp实现下拉加载更多 u-loadmore

本文介绍了如何在前端使用u-loadmore组件实现数据下拉加载更多,包括设置状态、onReachBottom函数的使用以及数据的追加处理,重点在于解决页面滚动触发加载的细节和效果控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

区别于官网教程,这里总结更为白话。

要实现的需求是,比如起初有十条数据,下拉至底部,追加某数量的数据。

比如我的项目中,我把它放在了数据展示的底部,上代码:

<view>
			<template>		
					<u-card :data="tableData" v-for="(item) in tableData" :key="item.id" :show-head="false" >
							<view class="" slot="body">
								<view class="u-body-item u-flex u-row-between u-p-b-0">
									<view class="u-body-item-title u-line-2 u-flex u-row-between">
									仓库:{{item.storageName}}
									</view>
								</view>
								<view class="u-body-item u-flex u-row-between u-p-b-0">
									<view class="u-body-item-title u-line-2 u-flex u-row-between">
										品类:{{item.pinleiName}}
										品目:{{item.pinmuName}}
									</view>
								</view>
								<view class="u-body-item u-flex u-row-between u-p-b-0">
									<view class="u-body-item-title u-line-2">名称:{{item.name}} 规格:{{item.guige}} 型号:{{item.xinghao}}</view>
								</view>
								<view class="u-body-item u-flex u-row-between u-p-b-0">
									<view class="u-body-item-title u-line-2">数量:{{item.shuliang}}  单位:{{item.danwei}}</view>
								</view>
							</view>
						</u-card>
						<view class="wrap">
							<u-loadmore :status="status" />
						</view>				
			</template>
		</view>	

此处强调的是u-loadmore。

通过status设置组件的状态,加载前值为loadmore,加载中为loading,没有数据为nomore

加载前,显示"加载更多",加入点击可选,是因为数据不够一页时,无法触发页面的onReachBottom生命周期加载中,显示"正在加载...",2种动画可选加载后,如果还有数据,回到"加载前"状态,否则加载结束,显示"没有更多了"

核心功能是onReachBottom函数:注意不在methods里面

onReachBottom() {
				if(this.currentPage >= this.pages) return ;
				this.status = 'loading';
				this.currentPage = ++ this.currentPage;
				setTimeout(() => {
					this.getTongji()
					if(this.currentPage >= this.pages) this.status = 'nomore';
					else this.status = 'loading';
				}, 1000)
			},

这里的currentPage是当前的页码,pages是总页数,

方法生效时,当前页码自增加一,调用查询数据的方法:

	getTongji:function(){
				this.$u.api.getTongji({"material":this.searchForm,"currentPage":this.currentPage,"pageSize":this.pageSize}).then(res=>{
					if(res.code==200){
					res.data.records.forEach(e=>{
						this.tableData.push(e)
					})
					this.pages=res.data.pages
					this.currentPage=res.data.current
					this.totalCount=res.data.total
					}else if(res.code==401){
						uni.navigateTo({
							url:"../login/login"
						})
						
					}else{
							uni.showToast({
								title:"加载错误",
								icon:"none",
							})
						}
				})
			},

注意成功之后的数据应该push进数组中,而不是直接等于,否则就是下拉换页的效果了。

UniApp 中的 u-loadmore 是一个轻量级的下拉刷新和加载更多组件,适用于列表类型的场景。如果你想在子组件中使用它实现触底加载,可以按照以下步骤操作: 1. **安装依赖**: 首先,确保你在项目的 `uni-app` 的 `components` 目录下安装了 `u-loadmore` 组件。你可以通过命令行工具运行 `npm install u-loadmore` 或者在配置文件 `package.json` 中添加依赖。 2. **导入并使用**: 在子组件的 `.vue` 文件里,引入 `u-loadmore` 组件: ```html <template> <view> <!-- ...其他内容 --> <u-loadmore :show-loading="isLoading" @load-more="loadMoreData" /> </view> </template> <script> import { loadmore } from '@vant/weapp/u-loadmore'; export default { components: { ULoadmore: { name: 'ULoadmore', props: ['showLoading', 'loadMoreFn'], methods: { async loadMoreData() { // 这里是你实际的加载数据方法,比如从API获取更多数据 const newData = await yourApiCall(); if (newData.length > 0) { this.$emit('load-more-finish', newData); // 通知父组件数据已加载完成 } else { this.isLoading = false; // 如果没有更多数据,停止加载动画 } }, }, }, }, data() { return { isLoading: false, }; }, }; </script> ``` 3. **父组件通信**: 父组件需要监听 `load-more-finish` 事件来处理加载更多的结果,并更新界面状态: ```html <template> <your-child-component @load-more-finish="handleLoadMoreFinish"></your-child-component> </template> <script> export default { methods: { handleLoadMoreFinish(newData) { this.listData.push(...newData); // 将新数据追加到已有列表数据中 this.$refs.loadmore.finish(); // 告诉 u-loadmore 结束加载 }, }, }; </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值