【uniapp】实现列表分页加载数据列表的方法,通过scroll-view下拉刷新,上拉加载的方法即可

 一、实现思路

1、通过上拉触底事件,累加下一页分页的数据到列表最后,并显示加载的效果

2、再判断总页数是否已经累加完成,如果已完成,则提示  “没有数据了” 

二、实现方法

使用scroll-view组件中的触底事件和下拉刷新事件即可

<scroll-view @scrolltolower="lowerBottom" @refresherrefresh="getFresh" scroll-y="true" class="scrollHeight">
	<!-- 此处加列表内容 -->
</scroll-view>

<script lang="ts" setup>
//触底加载
const lowerBottom=()=>{
  //处理触底后的逻辑
}

// 下拉刷新
const getFresh=()=> {
}
</script>

<style lang="scss" scoped>
//必须要设置指定的高度,否则没有触底的效果以及不会触发触底事件
.scrollHeight{
	height: 100vh;
}
</style>

三、以上截图全部代码

<template>
<scroll-view @scrolltolower="lowerBottom" @refresherrefresh="getFresh" scroll-y="true" class="scrollHeight">
	<view class="list" v-if="person.data.list&&person.data.list.length>0">
		<view class="item" v-for="(item,index) of person.data.list" :key="index" @click="toDetail(item)">
			<svg t="1669880074940" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10341" width="50" height="56"><path d="M196.608 102.4c-5.632 0-11.2128 1.024-16.384 3.072a41.472 41.472 0 0 0-13.7216 8.832C158.6176 122.24 153.6 132.1728 153.6 142.08v714.24c0 5.1968 1.1264 10.3424 3.328 15.104 2.2272 4.7872 5.4784 9.088 9.5744 12.672 3.9168 3.7376 8.6016 6.7072 13.7472 8.7296 5.1712 2.048 10.752 3.1232 16.3584 3.1744h630.784c5.632 0 11.2128-1.024 16.384-3.072a41.472 41.472 0 0 0 13.7216-8.832c4.0448-3.6096 7.2448-7.936 9.472-12.6976A36.608 36.608 0 0 0 870.4 856.32V346.5728L631.4752 102.4H196.608z" fill="#859FFF" p-id="10342"></path><path d="M870.4 346.5984h-196.7616a42.7776 42.7776 0 0 1-29.5168-12.928 44.672 44.672 0 0 1-12.672-30.1824V102.4L870.4 346.5984z" fill="#FFFFFF" fill-opacity=".42" p-id="10343"></path><path d="M408.4224 391.5264c0-14.8224 10.4448-20.9152 23.2192-13.6704l207.6928 117.632c12.8 7.2704 12.8 19.072 0 26.3168l-207.6928 117.6064c-12.8 7.2704-23.2192 1.152-23.2192-13.6704v-234.2144z" fill="#FFFFFF" p-id="10344"></path></svg>
			<view class="item_right">
				<view class="item_title">{{item.Name}}</view>
				<view class="collect_btn" @click.stop="cancelCollect(item)">
					<i :class="['iconfont', 'icon-Frame-11']" style="color:#F06F6F;"/>
				</view>
			</view>
		</view>
		<view class="more_text" v-if="person.showMoreData">没有数据了...</view>
	</view>
	<view v-else class="empty_box">
		<image src="@/static/null_icon.png" mode=""></image>
	</view>
</scroll-view>
</template>

<script lang="ts" setup>
import { reactive } from 'vue'
import { GetRemoveCollect } from '@/pages/user/hooks/collect.ts'; // 混入用户操作接口
import { getCollectList } from "@/api/user"
import {onShow} from "@dcloudio/uni-app";
let person:any=reactive({
	// 收藏列表
	data: {
		list: [],
		PageIndex: 1,
		PageSize: 10,
		total: 0
	},
	showMoreData:false
})
// 获取收藏列表
onShow(()=>{
	person.data.PageIndex=1
	uni.pageScrollTo({
	    scrollTop: 0
	});
	GetCollectList()
	if (person.data.PageIndex * person.data.PageSize >= person.data.total) return person.showMoreData=true
})

// 接口收藏列表
let GetCollectList = () => {
	uni.showLoading({title: '加载中'});
	let obj={
	    PageIndex: person.data.PageIndex,
	    PageSize: person.data.PageSize,
	}
	getCollectList(obj).then((res:any) => {
		let {Code,Data}=res.data
		if(Code===200){
			uni.hideLoading();
			person.data.list=[...person.data.list,...Data.Data]
			person.data.total = Data.Total
		}
	})
}

// 跳转至详情
let toDetail = (item:any) => {
	let obj = { Id: item.Id, NodeId: item.NodeId, IsCollect: 1 }
	uni.setStorageSync('setId', JSON.stringify(obj))
	uni.navigateTo({
		url: `/pages/recording/recordDetails`
	});
}
// 取消收藏
const cancelCollect = (item: any) => {
	uni.showModal({
		title: '是否取消收藏?',
		success: function (res) {
			if (res.confirm) {
				// 确定取消收藏
				GetRemoveCollect(item, item.Id, 1)
				// 获取收藏列表
				setTimeout(()=>{
					GetCollectList()
				},200)
			} else if (res.cancel) {
				// 取消
			}
		}
	});
}
//触底加载
const lowerBottom=()=>{
	// 判断是否还有下一页数据
	if (person.data.PageIndex * person.data.PageSize >= person.data.total) return person.showMoreData=true
	// 让页码值自增 +1
	person.data.PageIndex +=1
	// 重新获取列表数据
	GetCollectList()
}
// 下拉刷新
const getFresh=()=> {
}
</script>

<style lang="scss" scoped>
page{
	background: #F5F5F5;
}
.scrollHeight{
	height: 100vh;
	.more_text{
		color: #999;
		font-size: 24rpx;
		text-align: center;
	}
}
.list{
	top: 0rpx;
	padding-bottom: 20rpx;
	.item{
		align-items: center;
		padding: 10rpx 20rpx !important;
	}
	.item_right{
		display: flex;
		align-items: center;
		justify-content: space-between;
		width: 90%;
		margin-left: 10rpx;
		.item_title{
			width: 90%;
			height: inherit !important; 
		}
		.collect_btn{
			i{
				font-size: 40rpx;
				margin-left: 20rpx;
			}
		}
	}
}
</style>

       希望我的愚见能够帮助你哦~,若有不足之处,还望指出,你们有更好的解决方法,欢迎大家在评论区下方留言支持,大家一起相互学习参考呀~


版权声明:本文为weixin_50450473原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。