当前位置:首页 > 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实现atm

vue实现atm

Vue实现ATM机模拟功能 使用Vue.js实现ATM机模拟功能需要结合组件化开发、状态管理以及用户交互逻辑。以下是关键实现步骤: 核心组件结构 创建以下Vue组件构建ATM界面: Car…

vue 实现递归

vue 实现递归

Vue 实现递归组件的方法 在 Vue 中实现递归组件通常用于处理树形结构数据,例如菜单、评论列表或文件目录。以下是实现递归组件的关键步骤: 定义递归组件 递归组件需要设置 name 属性,以便在模…

vue实现前端

vue实现前端

Vue 实现前端的核心方法与步骤 安装 Vue 项目 使用 Vue CLI 或 Vite 创建项目。Vue CLI 是传统构建工具,Vite 是新一代轻量级工具。 npm init vue@la…

vue实现banner

vue实现banner

Vue实现Banner轮播 使用Vue实现Banner轮播可以通过第三方库如swiper或vue-awesome-swiper,也可以手动实现基础轮播效果。以下是两种常见方法: 使用vue-awes…

vue实现数据渲染

vue实现数据渲染

Vue 数据渲染的实现方式 Vue.js 提供了多种数据渲染的方式,包括插值表达式、指令和计算属性等。以下是常见的实现方法: 插值表达式 使用双大括号 {{ }} 将数据绑定到模板中,数据变化时会自…

vue实现精准查询

vue实现精准查询

实现精准查询的方法 在Vue中实现精准查询通常需要结合输入框、数据处理和筛选逻辑。以下是几种常见的方法: 使用计算属性进行筛选 计算属性适合对数据进行实时筛选,响应输入框的变化: <tem…