You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何实现vue-pagination-2分页库?求真实数据循环的使用示例

使用vue-pagination-2结合真实数据的完整示例

我之前也碰到过找不到真实数据分页示例的问题,下面给你一个清晰的实操方案,不管是前端本地分页还是后端接口分页的场景都能直接复用:

1. 先安装依赖

首先确保你已经安装了这个库:

npm install vue-pagination-2 --save

2. 完整Vue组件示例(前端分页场景)

这是最常见的本地数据分页场景,假设你已经从后端拿到了全部数据,前端做分页切割:

<template>
  <div class="pagination-demo">
    <!-- 展示当前页的数据列表 -->
    <div class="data-list">
      <div v-for="(item, idx) in currentPageData" :key="idx" class="data-item">
        <h4>{{ item.name }}</h4>
        <p>ID: {{ item.id }} | 分类: {{ item.category }}</p>
      </div>
    </div>

    <!-- 引入vue-pagination-2组件 -->
    <pagination
      :total="totalDataCount"
      :per-page="itemsPerPage"
      :current-page="currentPage"
      @page-changed="handlePageChange"
      :max-size="5" <!-- 控制分页按钮显示的数量 -->
    />
  </div>
</template>

<script>
// 导入分页组件
import Pagination from 'vue-pagination-2'

export default {
  components: {
    Pagination
  },
  data() {
    return {
      // 存储从后端获取的全部数据(真实场景用axios/fetch请求)
      fullData: [],
      currentPage: 1, // 当前选中的页码
      itemsPerPage: 6, // 每页展示的数据条数
      totalDataCount: 0 // 总数据量
    }
  },
  computed: {
    // 计算当前页需要展示的数据片段
    currentPageData() {
      const startIdx = (this.currentPage - 1) * this.itemsPerPage
      const endIdx = startIdx + this.itemsPerPage
      return this.fullData.slice(startIdx, endIdx)
    }
  },
  mounted() {
    // 模拟从后端获取数据的异步请求
    this.loadFullData()
  },
  methods: {
    loadFullData() {
      // 这里用setTimeout模拟接口请求,真实项目替换成你的API调用
      setTimeout(() => {
        // 生成20条模拟数据,对应4页(每页6条)
        this.fullData = Array.from({ length: 20 }, (_, i) => ({
          id: i + 1,
          name: `商品${i + 1}`,
          category: i % 3 === 0 ? '数码' : i % 3 === 1 ? '服饰' : '家居'
        }))
        this.totalDataCount = this.fullData.length
      }, 800)
    },
    // 页码切换时的回调函数
    handlePageChange(newPage) {
      this.currentPage = newPage
      // 如果是滚动页面,这里可以加上回到顶部的逻辑
      window.scrollTo({ top: 0, behavior: 'smooth' })
    }
  }
}
</script>

<style scoped>
.pagination-demo {
  max-width: 800px;
  margin: 2rem auto;
  padding: 0 1rem;
}
.data-list {
  margin-bottom: 2rem;
}
.data-item {
  padding: 1.2rem;
  border: 1px solid #e0e0e0;
  border-radius: 8px;
  margin-bottom: 1rem;
}
/* 分页组件的样式可以根据需求自定义,或者用库自带的基础样式 */
</style>

3. 后端分页场景调整

如果你的数据量很大,需要后端做分页返回(比如接口需要传pagepageSize参数),只需要修改数据请求和分页逻辑:

// 修改loadFullData方法,支持传页码参数
async loadFullData(page = 1) {
  try {
    // 真实API请求示例,替换成你的接口地址
    const res = await this.$axios.get('/api/get-data', {
      params: {
        page: page,
        pageSize: this.itemsPerPage
      }
    })
    // 假设接口返回结构:{ data: [], total: 20 }
    this.fullData = res.data.data // 当前页的数据
    this.totalDataCount = res.data.total // 总数据条数
    this.currentPage = page
  } catch (err) {
    console.error('数据请求失败:', err)
  }
}

// 修改handlePageChange方法
handlePageChange(newPage) {
  this.loadFullData(newPage)
}

关键要点说明

  • 计算属性currentPageData:前端分页的核心,通过截取数组片段实现当前页数据展示。
  • 分页组件参数total是总数据量,per-page是每页条数,current-page是当前页码,@page-changed是页码切换的回调事件。
  • 样式自定义:你可以通过给分页组件添加class或者修改全局样式来调整分页按钮的外观,适配你的项目UI。

内容的提问来源于stack exchange,提问作者user14166158

火山引擎 最新活动