当前位置:首页 > VUE

用vue怎样实现分页

2026-01-23 01:09:37VUE

使用Vue实现分页功能

分页功能通常需要结合后端API返回的数据和前端UI组件实现。以下是基于Vue 3的常见实现方式(Vue 2类似,部分语法需调整):

基础分页逻辑实现

  1. 数据准备 定义分页相关数据状态:

    const pagination = reactive({
      currentPage: 1,
      pageSize: 10,
      totalItems: 0,
      totalPages: 0
    })
    const items = ref([]) // 存储分页数据
  2. 获取分页数据 通过API获取数据时传递分页参数:

    async function fetchData() {
      const res = await api.get('/items', {
        params: {
          page: pagination.currentPage,
          size: pagination.pageSize
        }
      })
      items.value = res.data.items
      pagination.totalItems = res.data.total
      pagination.totalPages = Math.ceil(res.data.total / pagination.pageSize)
    }
  3. 分页控件模板 基础分页UI实现:

    <div class="pagination">
      <button 
        @click="pagination.currentPage--" 
        :disabled="pagination.currentPage === 1">
        上一页
      </button>
    
      <span v-for="page in pageRange" 
            @click="pagination.currentPage = page"
            :class="{ active: page === pagination.currentPage }">
        {{ page }}
      </span>
    
      <button 
        @click="pagination.currentPage++" 
        :disabled="pagination.currentPage === pagination.totalPages">
        下一页
      </button>
    </div>

计算页码范围

添加计算属性生成显示的页码范围(避免过多页码显示):

const pageRange = computed(() => {
  const range = []
  const start = Math.max(1, pagination.currentPage - 2)
  const end = Math.min(pagination.totalPages, pagination.currentPage + 2)

  for (let i = start; i <= end; i++) {
    range.push(i)
  }
  return range
})

使用现成组件库

  1. Element Plus分页

    用vue怎样实现分页

    <el-pagination
      v-model:current-page="pagination.currentPage"
      :page-size="pagination.pageSize"
      :total="pagination.totalItems"
      @current-change="fetchData"
      layout="prev, pager, next"
    />
  2. Ant Design Vue分页

    <a-pagination
      v-model:current="pagination.currentPage"
      :pageSize="pagination.pageSize"
      :total="pagination.totalItems"
      @change="fetchData"
    />

客户端分页实现

如果数据量不大可做前端分页:

const paginatedItems = computed(() => {
  const start = (pagination.currentPage - 1) * pagination.pageSize
  const end = start + pagination.pageSize
  return allItems.value.slice(start, end)
})

关键样式示例

基础分页样式建议:

用vue怎样实现分页

.pagination {
  display: flex;
  gap: 8px;
  margin-top: 20px;
}
.pagination button {
  padding: 5px 10px;
}
.pagination span {
  padding: 5px 10px;
  cursor: pointer;
}
.pagination .active {
  background: #3498db;
  color: white;
}

注意事项

  • 监听页码变化时重新获取数据:

    watch(() => pagination.currentPage, fetchData)
  • 对于移动端可以考虑使用无限滚动(infinite scroll)替代传统分页

  • 分页参数应与后端API约定一致(常见参数名:page/size 或 offset/limit)

  • 大型数据集建议使用服务器端分页,避免性能问题

标签: 分页vue
分享给朋友:

相关文章

vue实现轮播图

vue实现轮播图

Vue 实现轮播图的方法 使用第三方库(推荐) Vue 生态中有许多成熟的轮播图组件库,例如 Swiper、Vue-Awesome-Swiper 等,它们提供了丰富的配置和响应式支持。 安装 vu…

vue实现添加用户

vue实现添加用户

Vue 实现添加用户功能 数据绑定与表单设计 在 Vue 中实现添加用户功能,首先需要设计一个表单,用于收集用户输入的数据。通过 v-model 实现双向数据绑定,确保表单数据与 Vue 实例中的数据…

vue实现滚动截屏

vue实现滚动截屏

实现滚动截屏的基本思路 滚动截屏通常指对超出可视区域的长页面进行完整截图。在Vue中,可以通过结合DOM操作、Canvas绘制及第三方库实现。以下是具体方法: 使用html2canvas库实现…

vue异步组建实现原理

vue异步组建实现原理

Vue 异步组件实现原理 Vue 的异步组件允许将组件按需加载,通常用于代码分割或延迟加载非关键组件。其核心原理基于 Promise 和动态导入。 基本实现方式 通过 defineAsyncCom…

vue自己实现下拉导航

vue自己实现下拉导航

实现下拉导航的基本思路 在Vue中实现下拉导航,可以通过结合Vue的响应式数据和事件绑定特性来完成。主要思路是利用v-show或v-if控制下拉菜单的显示与隐藏,并通过鼠标事件或点击事件触发状态变化。…

vue实现打印二维码

vue实现打印二维码

安装二维码生成库 使用 qrcode 或 vue-qrcode 库生成二维码。通过 npm 安装: npm install qrcode vue-qrcode 生成二维码 在 Vue 组…