1 回复
当然,uni-app
支持在长列表商品列表组件中实现上拉加载功能。uni-app
提供了丰富的 API 和组件来实现这一需求。下面是一个简单的示例,展示了如何在商品列表组件中实现上拉加载功能。
首先,确保你的项目已经安装了 uni-app
,并且你有一个基本的商品列表页面。
- 在页面中引入必要的组件和设置
<template>
<view>
<scroll-view scroll-y="true" @scrolltolower="loadMore" style="height: 100vh;">
<view v-for="(item, index) in goodsList" :key="index" class="goods-item">
{{ item.name }} - {{ item.price }}
</view>
<view v-if="loading" class="loading">加载中...</view>
<view v-if="noMoreData" class="no-more-data">没有更多数据了</view>
</scroll-view>
</view>
</template>
<script>
export default {
data() {
return {
goodsList: [], // 商品列表数据
page: 1, // 当前页码
loading: false, // 是否正在加载
noMoreData: false // 是否有更多数据
};
},
methods: {
// 加载更多数据
loadMore() {
if (this.loading || this.noMoreData) return;
this.loading = true;
// 模拟异步请求数据
setTimeout(() => {
const newData = [];
for (let i = 0; i < 10; i++) {
newData.push({
name: `商品${(this.page - 1) * 10 + i + 1}`,
price: Math.floor(Math.random() * 100) + 1
});
}
this.goodsList = this.goodsList.concat(newData);
this.page++;
// 假设加载到第3页后没有更多数据
if (this.page >= 3) {
this.noMoreData = true;
}
this.loading = false;
}, 1000);
}
},
mounted() {
// 初始化加载数据
this.loadMore();
}
};
</script>
<style>
.goods-item {
padding: 10px;
border-bottom: 1px solid #ddd;
}
.loading {
text-align: center;
padding: 10px;
}
.no-more-data {
text-align: center;
padding: 10px;
color: #999;
}
</style>
这个示例中,我们使用 scroll-view
组件来实现滚动列表,并通过监听 @scrolltolower
事件来触发加载更多数据的操作。loadMore
方法中模拟了一个异步请求数据的操作,并在数据加载完成后更新列表。同时,我们还处理了加载状态和没有更多数据的情况。
这样,你就可以在 uni-app
中实现一个支持上拉加载的商品列表组件了。根据实际需求,你可以将模拟的异步请求替换为实际的 API 请求。