【uniApp】实现列表下拉触底加载更多功能

<scroll-view :style="'height:' + scrollViewH + 'px;'" 
	scroll-y="true" 
	@scrolltolower="onReachLower">
	<uni-collapse ref="collapse" v-model="value" v-for="el in listData" :key="el.id">
		<uni-collapse-item :title="el.stationname" titleBorder="none">
			<view class="info-content" @click="showInfo(el)">
				<p>{{el.warntime}} &nbsp;&nbsp;{{el.warninfo}}</p>
			</view>			
		</uni-collapse-item>
	</uni-collapse>
	<uni-load-more v-if="showLoadMore" :status="loadStatus" :content-text="contentText"></uni-load-more>
</scroll-view>
export default {
	data() {
		return {
			params: {
				pageNum: 1, // 页码
				pageSize: 10 // 条数
			},
			listData: [], // 当前页列表数据
			// 下拉加载
			allListCount: 0, // 列表总数
			allListData: [], // 列表所有数据
			scrollViewH: 0, // 列表滚动区域
			showLoadMore: false,
			loadStatus: "more",
			contentText: {
				contentdown: '查看更多',
				contentrefresh: '加载中……',
				contentnomore: '已全部加载'
			}
		}
	},
	onLoad() {
		this.getScrollHeight()
		this.getList()
	},
	methods: {
		// 获取屏幕高度
		getScrollHeight() {
			let self = this;
				uni.getSystemInfo({
					success(res) {
						self.scrollViewH = res.windowHeight - 120; // 120为页面中我查询条件高度,根据实现情况调整
					}
				});
		},
		// 滚动到底部显示加载状态
		onReachLower(){
			this.showLoadMore = true
			if(this.listData.length >= this.allListCount){
				this.loadStatus = "noMore"
			}else{
				this.loadStatus = "loading"
				setTimeout(()=>{
					this.params.pageNum ++;
					this.loadMore();
				}, 1000)	
			}		
		},
		// 根据接口获取列表数据,此处为后端分页,可根据实际情况改为前端分页
		getList() {
			this.$api.getDataByAjax(url, 'GET', this.params).then((res)=>{
				if (res.code === 200 && res.data) {
					this.allListCount = res.data.count
					this.listData = res.data
				}
			})
		},
		// 加载更多
		loadMore(){
			this.$api.getDataByAjax(url, 'GET', this.params).then((res)=>{
				if (res.code === 200 && res.data) {
					this.listData = this.listData.concat(res.data); // 合并下一页数据
				}
			})
		},
	}
}
你可以使用 uniapp下拉刷新组件和列表组件来实现下拉分页加载数据的功能。下面是一个简单的示例代码: 首先,在页面的 template 中添加下拉刷新和列表组件: ```html <template> <view> <scroll-view scroll-y="true" @scrolltolower="loadMore"> <refresh refresher-triggered="refreshData"> <view class="list"> <view v-for="(item, index) in dataList" :key="index" class="item"> <!-- 显示数据项的内容 --> </view> </view> </refresh> </scroll-view> </view> </template> ``` 然后,在页面的 script 中定义相关的数据和方法: ```javascript <script> export default { data() { return { dataList: [], // 存储加载的数据列表 pageNum: 1, // 当前页码 pageSize: 10, // 每页显示的数据数量 isLoading: false, // 是否正在加载数据 }; }, methods: { // 下拉刷新数据 refreshData() { this.pageNum = 1; this.dataList = []; this.loadData(); }, // 加载多数据 loadMore() { if (this.isLoading) return; this.pageNum++; this.loadData(); }, // 请求加载数据 loadData() { this.isLoading = true; // 发起请求,获取第 pageNum 页的数据 // 可以使用 uni.request 或 uni.$http 等方法发送网络请求 // 请求成功后将返回的数据添加到 dataList 中,如 this.dataList.push(...response.data) // 请求完成后,记得设置 this.isLoading = false; }, }, }; </script> ``` 在上面的代码中,`refreshData` 方法用于下拉刷新数据,会重置页码和数据列表,然后调用 `loadData` 方法加载第一页的数据。`loadMore` 方法用于触底加载多数据,会增加页码并调用 `loadData` 方法加载下一页的数据。`loadData` 方法中可以使用 uni.request 或 uni.$http 等方法发送网络请求,成功后将返回的数据添加到 dataList 中,并在请求完成后设置 isLoading 为 false。 这样,当用户下拉刷新或触底时,就会触发相应的方法来加载新的数据,实现下拉分页加载数据的功能。你可以根据实际情况进行相应的修改和优化。希望对你有帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值