uniapp 分页,分为scroll-view以及页面下拉刷新 onReachBottom两种情况

1、包含在scroll-view里的滚动分页

<template>
	<view>
		<scroll-view scroll-y id="scrollList" :style="updateHeight()" @scrolltolower="scrolltolower">
			<!-- 列表,这里封装成子组件了,要换成自己的列表 -->
			<baseInfo :list="list"/>
			<!-- 状态:加载更多、没有更多了... -->
			<u-loadmore icon :status="status"/>
		</scroll-view>
	</view>
</template>

<script>
	import { shop_info } from '@/api/index.js';
	export default {
		data() {
			return {
				listTop: 0,
				status: 'loadmore', // 状态-正在加载中
				currentPage: 1,// 当前页
				size: 10, // 每页数量
				pageCount: '', // 总页数
				list: [],
			}
		},
		onLoad() {
			this.getStoreList()
		},
		methods: {
            // 滚动区域
			updateHeight() {
				setTimeout(() => {
					let query = uni.createSelectorQuery().in(this);
					//需要给黄色区域设置一个id标识,在这里是scrollList
					query.select('#scrollList').boundingClientRect(data => {
						this.listTop = data.top//距离顶部的高度
					}).exec();
				},100)
				return { height: `calc(100vh - ${this.listTop}px - 32rpx)` };
			},
			// 获取列表
			async getStoreList() {
				let agentShop = {
					page: this.currentPage,
					size: this.size,
				}
				await shop_info(agentShop).then(res => {
					console.log(res)
					this.pageCount = res.pageCount
					this.list.push(...res.shop)
					// res.page -- 后端返回的当前页,
					// res.pageCount -- 后端返回的总页数
					if(this.list.length == 0 || res.page==res.pageCount) {
						this.status = 'nomore';
					}
				})
			},
			// 滚动到底部
			scrolltolower(e) {
				if(this.currentPage < this.pageCount){
					this.currentPage++
					this.getStoreList()
				}else {
					this.status = 'nomore';
				}
			},
		}
	}
</script>

2、页面滚动分页(下拉刷新 onReachBottom)

注意:page 的 overflow 必须为 visible,否则触发不了 onReachBottom

<template>
	<view >
		<!-- 列表 -->
		<view class="card_item" v-for="(item,index) in list" :key="index">
			<view>{{item.offNetwork}}(失联)</view>
			<view>{{item.onNetwork}}(重联)</view>
			<view>{{item.disappearDuration}}(失联时长)</view>
		</view>
		<!-- 正在加载中 -->
		<u-loadmore icon :status="status"/>
	</view>
</template>

<script>
	import { net_list } from '@/api/index.js';
	export default {
		data() {
			return {
				list: [],
				status: 'loading',
				currentPage: 1,// 当前页
				size: 10, // 每页数量
				pageCount: '', // 总页数
			}
		},
		onLoad() {
			this.get_list()
		},
		//下拉刷新
		onReachBottom() {
			if(this.currentPage < this.pageCount){
				this.currentPage++
				this.get_list()
			}else {
				this.status = 'nomore';
			}
		},
		methods: {
			async get_list() {
				let params = {
					page: this.currentPage,
					size: this.size,
				}
				await net_list(this.deviceId, params).then(res => {
					this.pageCount = res.pageCount
					this.list.push(...res.listData)
					if(this.list.length == 0 || res.page==res.pageCount) {
						this.status = 'nomore';
					}
				})
			}
		}
	}
</script>

<style lang="scss" scoped>
page {
	overflow: visible;
}
.card_item {
	background: #c7c7c7;
	margin-top: 28rpx;
}
.card_item:first-child {
	margin-top: 0;
}
</style>

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Uniapp 中,你可以使用 `uni.request` 方法从后端获取所有数据。一般情况下,你可以在 `onLoad` 方法中调用该方法,获取数据之后将其保存到页面的数据中,然后使用 `uni-list` 或 `uni-grid` 等组件渲染数据。 以下是一个简单的示例代码: ```html <template> <view> <scroll-view scroll-y="true" class="scroll-view"> <view v-for="(item, index) in dataList" :key="index">{{ item }}</view> </scroll-view> </view> </template> <script> export default { data() { return { dataList: [], currentPage: 1, pageSize: 10, }; }, onLoad() { this.getDataList(); }, methods: { getDataList() { uni.request({ url: 'http://your-api.com/data-list', success: (res) => { this.dataList = res.data; // 将返回的数据保存到页面数据中 }, }); }, onPullDownRefresh() { // 下拉刷新,重新获取数据 this.getDataList(); uni.stopPullDownRefresh(); }, onReachBottom() { // 上拉加载更多 this.currentPage++; const start = (this.currentPage - 1) * this.pageSize; const end = start + this.pageSize; this.dataList = this.dataList.concat(this.dataList.slice(start, end)); }, }, }; </script> ``` 在这个示例中,我们先定义了一个空数组 `dataList` 来保存所有数据。在 `onLoad` 方法中调用 `getDataList` 方法,该方法使用 `uni.request` 发送网络请求,获取所有数据并将其保存到 `dataList` 中。然后我们使用 `scroll-view` 组件渲染数据,在下拉刷新和上拉加载更多时更新数据。 在上拉加载更多时,我们通过当前页码和每页大小计算出需要显示的数据范围,并使用 `concat` 方法将新数据合并到原来的数据中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值