uniapp实现XX列表触底加载

本文档展示了HTML模板、Vue.js代码和CSS样式,用于列表形式呈现积分兑换与消费的详细情况,包括用户账号、交易状态、支付/消费金额等关键信息。

不说废话直接上图、上代码

1.html部分:

<template>
	<view class="content integral">
		<view class="integral-list" v-for="(item,index) in recordlist" :key="index">
			<view class="integral-list-header">
				<view class="integral-list-header-account">{{item.memberAccount||'XX科技'}}</view>
				<view class="integral-list-header-points" v-if="item.points>0">
					+{{item.points}}
				</view>
				<view class="integral-list-header-points green" v-if="item.points<=0">
					{{item.points}}
				</view>
			</view>
			<template v-if="item.points>0">
				<view class="integral-list-main">
					<view class="integral-list-main-list">
						<view>结果状态</view>
						<view>{{item.status?'成功':'失败'}}</view>
					</view>
					<view class="integral-list-main-list">
						<view>用户账号</view>
						<view>{{item.memberAccount||'XX科技'}}</view>
					</view>
					<view class="integral-list-main-list">
						<view>支付时间</view>
						<view>{{item.exDate}}</view>
					</view>
					<view class="integral-list-main-list">
						<view>支付方式</view>
						<view>{{item.type.split('-')[1]}}</view>
					</view>
					<view class="integral-list-main-list">
						<view>交易编号</view>
						<view>{{item.id}}</view>
					</view>
				</view>
			</template>
			<template v-if="item.points<=0">
				<view class="integral-list-main">
					<view class="integral-list-main-list">
						<view>结果状态</view>
						<view>{{item.status?'成功':'失败'}}</view>
					</view>
					<view class="integral-list-main-list">
						<view>用户账号</view>
						<view>{{item.memberAccount||'XX科技'}}</view>
					</view>
					<view class="integral-list-main-list">
						<view>消费金额</view>
						<view>{{item.points}}</view>
					</view>
					<view class="integral-list-main-list">
						<view>发放账号</view>
						<view>{{item.vendorTel ||'XX科技'}}</view>
					</view>
					<view class="integral-list-main-list">
						<view>发放时间</view>
						<view>{{item.exDate}}</view>
					</view>
					<view class="integral-list-main-list">
						<view>发放方式</view>
						<view>{{item.type.split('-')[1]}}</view>
					</view>
					<view class="integral-list-main-list">
						<view>交易编号</view>
						<view>{{item.id}}</view>
					</view>
				</view>
			</template>
		</view>
		<view class="null" v-if="page == pages">没有更多交易记录了</view>
	</view>
</template>

2. js实现部分:

<script>
	export default {
		data() {
			return {
				page: 1,
				pages: 0,
				isPull: false,
				recordlist: [], //交易数据列表
			};
		},
		onLoad() {
			this.getList()
		},
		onPullDownRefresh() {
			this.page = 1;
			this.isPull = true;
			this.getList();
		},
		onReachBottom() {
			if (this.page < this.pages) {
				this.page++;
				this.getList();
			}
		},
		methods: {
			getList() {
				this.$http('Uurl', {
					page: this.page,
					pageSize: 10
				}, "POST").then(data => {
					uni.stopPullDownRefresh();
					this.pages = data.data.pages;
					if (this.isPull) {
						this.isPull = false;
						this.recordlist = [];
					}
					this.recordlist = this.recordlist.concat(data.data.list);
				})
			},
		}
	}
</script>

 3.css部分:

<style lang="scss" scoped>
	.integral {
		min-height: 100vh;
		padding-bottom: 20upx;
		background: #F4F4F4;

		&-list {
			padding: 0 20upx;
			background-color: #FFFFFF;
			margin-bottom: 20upx;

			&-header {
				padding: 30upx 0;
				border-bottom: 1upx solid #EBEBEB;
				text-align: center;

				&-account {
					font-size: 26upx;
					color: #181818;
				}

				&-points {
					margin-top: 20upx;
					color: #F95151;
					font-size: 42upx;

					&.green {
						color: #06C05F;
					}
				}
			}

			&-main {
				padding: 20upx 10upx;

				&-list {
					display: flex;
					flex-direction: row;

					view {
						width: 160upx;
						line-height: 50upx;
						font-size: 26upx;
						color: #8B8B8B;

						&:last-child {
							width: calc(100% - 160upx);
							color: #181818;
						}
					}
				}
			}
		}
		.null {
			text-align: center;
			color: #AAAAAA;
			font-size: 24upx;
		}
	}
</style>

 

UniApp(Vue.js 开发框架)中的子组件列表实现触底加载通常通过 Vue 的生命周期钩子和滚动事件监听来完成。以下是基本步骤: 1. **设置状态**: 创建一个布尔型变量,例如 `isLoadMore`, 初始值设为 `false`,表示是否需要加载更多数据。 2. **顶部布局**: 在父组件的模板中,使用 `v-for` 循环展示子组件,并添加一个虚拟滚动区域(如 `div` 或者使用 `scroll-view` 组件),当滚动到底部时触发加载事件。 ```html <template> <scroll-view :virtual="true" @scroll-bottom="loadMore"> <template v-for="(item, index) in list" :key="index"> <!-- 子组件的渲染 --> <child-component :data="item" /> </template> <div v-if="isLoadMore">正在加载...</div> </scroll-view> </template> <script> export default { data() { return { isLoadMore: false, list: [], // 存放子组件的数据源 }; }, methods: { loadMore() { if (!this.isLoadMore && this.hasMoreData()) { // 如果还未加载过并且还有更多数据 this.isLoadMore = true; // 设置标志为加载中 // 加载更多数据的 API 调用 this.loadMoreData().then(() => { // 数据加载成功后更新列表 this.list.push(...newData); // newData 是从服务器获取的新数据 this.isLoadMore = false; // 设置标志为已加载 }); } }, hasMoreData() { // 根据实际数据判断是否有更多数据 return /* 判断条件 */; }, loadMoreData() { // 这里填写实际的网络请求函数 return axios.get('/api/load-more'); }, }, }; </script> ``` 3. **处理加载状态**: 在 `loadMoreData()` 函数中,你可以调用后端API获取更多数据。当数据返回后,更新 `list` 数组并清空 `isLoadMore` 标志。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值