uni-app 长列表商品列表组件 支持上拉加载吗

发布于 1周前 作者 h691938207 来自 Uni-App

uni-app 长列表商品列表组件 支持上拉加载吗

1 回复

当然,uni-app 支持在长列表商品列表组件中实现上拉加载功能。uni-app 提供了丰富的 API 和组件来实现这一需求。下面是一个简单的示例,展示了如何在商品列表组件中实现上拉加载功能。

首先,确保你的项目已经安装了 uni-app,并且你有一个基本的商品列表页面。

  1. 在页面中引入必要的组件和设置
<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 请求。

回到顶部