当前位置:首页 > 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分页

    <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)
})

关键样式示例

基础分页样式建议:

.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 实现冰墩墩动画 通过 Vue 的动画特性和 SVG 技术,可以动态渲染冰墩墩的形象。以下是具体实现方法: 准备 SVG 素材 冰墩墩的形象通常由多个 SVG 路径组成,包括身体轮廓、面…

vue实现递归

vue实现递归

Vue 实现递归组件的方法 在 Vue 中实现递归组件通常用于处理树形结构数据(如菜单、评论列表、文件目录等)。以下是具体实现方法: 定义递归组件 通过 name 选项让组件可以递归调用自身: &…

vue实现选区

vue实现选区

Vue 实现选区的基本方法 在Vue中实现选区功能通常涉及DOM操作和事件处理。以下是几种常见的方法: 使用原生JavaScript的Selection API 通过window.getSelec…

vue实现缩放

vue实现缩放

Vue 实现缩放的方法 在 Vue 中实现缩放功能可以通过多种方式完成,以下是一些常见的方法: 使用 CSS transform 属性 通过 CSS 的 transform: scale() 属性可…

vue实现slider

vue实现slider

Vue 实现 Slider 组件 使用 Vue 实现 Slider 组件可以通过原生开发或借助第三方库。以下是两种常见方法: 原生实现 Slider 创建一个基础的 Slider 组件,通过 v-m…

vue 实现弹幕

vue 实现弹幕

vue 实现弹幕的方法 使用 CSS 动画和动态渲染 在 Vue 中实现弹幕效果,可以通过动态渲染弹幕元素并结合 CSS 动画实现。以下是具体步骤: 数据准备 创建一个数组存储弹幕数据,每条弹幕包…