使用elementplus中的分页器,后端一次性返100条数据,前端自己做分页处理,vue3写法

安装依赖

确保你已经安装了 Vue 3 和 Element Plus:

npm install vue@next element-plus

组件

<template>
  <div>
    <el-table :data="currentPageData" style="width: 100%">
      <el-table-column prop="name" label="姓名" />
      <el-table-column prop="age" label="年龄" />
      <el-table-column prop="email" label="邮箱" />
    </el-table>

    <el-pagination
      v-model:current-page="currentPage"
      :page-size="pageSize"
      :total="totalData"
      @current-change="handlePageChange"
      layout="total, prev, pager, next, jumper"
    />
  </div>
</template>

<script>
import { ref, computed } from 'vue';

export default {
  setup() {
    const data = ref([]); // 存放从后端获取的数据
    const currentPage = ref(1);
    const pageSize = ref(10); // 每页显示的条目数

    // 假设这里是从后端获取的数据
    const totalData = 100; // 总数据条数
    const fetchData = async () => {
      // 模拟异步请求
      const response = await new Promise((resolve) =>
        setTimeout(() => {
          // 生成模拟数据
          const data = Array.from({ length: totalData }, (_, index) => ({
            name: `姓名 ${index + 1}`,
            age: Math.floor(Math.random() * 40) + 20,
            email: `example${index + 1}@domain.com`,
          }));
          resolve(data);
        }, 1000)
      );
      data.value = response;
    };

    const currentPageData = computed(() => {
      const start = (currentPage.value - 1) * pageSize.value;
      const end = start + pageSize.value;
      return data.value.slice(start, end);
    });

    const handlePageChange = (newPage) => {
      currentPage.value = newPage;
    };

    // 在组件挂载时获取数据
    fetchData();

    return {
      data,
      currentPage,
      pageSize,
      totalData,
      currentPageData,
      handlePageChange,
    };
  },
};
</script>

<style>
/* 添加一些样式 */
</style>

说明

  • 数据获取:fetchData 函数模拟了一个异步请求,获取 100 条数据。
  • 分页逻辑:通过 computed 计算属性 currentPageData,根据当前页码和每页大小计算出当前显示的数据。
  • Element Plus 分页器:使用 el-pagination 组件实现分页功能,通过 v-model:current-page 绑定当前页,并在页码变化时调用 handlePageChange 函数更新当前页。
Vue3 + Element Plus实现前端分页,当后端一次性提供所有数据,而前端需要显示并处理分页功能时,可以按照以下步骤来设计实现逻辑: 1. **接收数据**: - 后端将所有数据作为响应回给前端。你可以通过axios等库将这些数据发送到`created()`或`mounted()`生命周期钩子函数。 ```javascript data() { return { allData: [], // 存放所有数据的数组 currentPage: 1, // 当前页数,默认第一页 pageSize: 10, // 每页显示的数据量 totalPages: 0, // 总页数 }; }, async created() { const res = await axios.get('/api/data', { data: this.allData }); this.allData = res.data; this.calculateTotalPages(); } ``` 2. **计算总页数**: - 分别除以每页大小来获取总的页数,并保存在`totalPages`变量。 ```javascript calculateTotalPages() { this.totalPages = Math.ceil(this.allData.length / this.pageSize); } ``` 3. **分页组件**: - 使用Element Plus的`el-pagination`组件,设置当前页、每页数量以及总页数。 ```html <template> <el-pagination :page-size="pageSize" :current-page="currentPage" :total="totalPages" @current-change="handleCurrentChange" ></el-pagination> </template> <script> methods: { handleCurrentChange(page) { this.currentPage = page; // 更新展示的数据范围 this.displayData(); }, displayData() { const start = (this.currentPage - 1) * this.pageSize; const end = start + this.pageSize; this.$set(this.allData, 'list', this.allData.slice(start, end)); } } </script> ``` 4. **显示数据**: - 在`displayData()`方法,更新显示的数据范围,只渲染当前页的数据。 现在前端实现了分页,每次用户点击页面跳转时,前端会自动从`allData`提取对应范围的数据展示,而无需每次都请求接口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值