当前位置:首页 > VUE

vue查询分页前端实现

2026-02-20 17:04:56VUE

Vue 分页查询前端实现

基础分页组件实现

使用 v-for 渲染分页按钮,通过 v-model 绑定当前页码:

<template>
  <div class="pagination">
    <button @click="prevPage" :disabled="currentPage === 1">上一页</button>
    <button 
      v-for="page in totalPages" 
      :key="page"
      @click="changePage(page)"
      :class="{ active: currentPage === page }"
    >
      {{ page }}
    </button>
    <button @click="nextPage" :disabled="currentPage === totalPages">下一页</button>
  </div>
</template>

<script>
export default {
  props: {
    totalItems: Number,
    itemsPerPage: {
      type: Number,
      default: 10
    }
  },
  data() {
    return {
      currentPage: 1
    }
  },
  computed: {
    totalPages() {
      return Math.ceil(this.totalItems / this.itemsPerPage)
    }
  },
  methods: {
    changePage(page) {
      this.currentPage = page
      this.$emit('page-changed', page)
    },
    prevPage() {
      if (this.currentPage > 1) this.changePage(this.currentPage - 1)
    },
    nextPage() {
      if (this.currentPage < this.totalPages) this.changePage(this.currentPage + 1)
    }
  }
}
</script>

结合API请求

在父组件中处理分页数据请求:

export default {
  data() {
    return {
      listData: [],
      total: 0,
      pageSize: 10
    }
  },
  methods: {
    async fetchData(page = 1) {
      const res = await api.getList({
        page,
        size: this.pageSize
      })
      this.listData = res.data.list
      this.total = res.data.total
    }
  },
  mounted() {
    this.fetchData()
  }
}

使用Element UI分页组件

若使用Element UI,可快速实现分页:

<el-pagination
  @current-change="handlePageChange"
  :current-page="currentPage"
  :page-size="pageSize"
  :total="total"
  layout="prev, pager, next">
</el-pagination>

性能优化建议

实现虚拟滚动应对大数据量:

import { VirtualList } from 'vue-virtual-scroll-list'
export default {
  components: { VirtualList },
  data() {
    return {
      items: [], // 所有数据
      visibleData: [] // 当前页数据
    }
  }
}

分页样式处理

添加CSS美化分页组件:

vue查询分页前端实现

.pagination {
  display: flex;
  justify-content: center;
  margin-top: 20px;
}
.pagination button {
  margin: 0 5px;
  padding: 5px 10px;
  border: 1px solid #ddd;
}
.pagination button.active {
  background-color: #409eff;
  color: white;
}
.pagination button:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

注意事项

  • 分页参数应与后端约定一致(通常从1开始)
  • 处理无数据时的空状态显示
  • 考虑添加页面大小切换功能
  • 在路由中保存当前页码实现页面刷新后保持状态

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

相关文章

vue实现mouseout

vue实现mouseout

Vue 实现 mouseout 事件的方法 在 Vue 中实现 mouseout 事件可以通过多种方式完成,以下是几种常见的方法: 使用 v-on 指令 Vue 提供了 v-on 指令(或简写为 @…

vue实现视频

vue实现视频

Vue 实现视频播放的方法 在 Vue 项目中实现视频播放可以通过多种方式完成,以下是几种常见的方法: 使用 HTML5 的 <video> 标签 在 Vue 组件中直接使用 HTML…

vue实现pc

vue实现pc

Vue 实现 PC 端应用开发 Vue.js 是一个流行的前端框架,适用于构建 PC 端 Web 应用。以下是关键步骤和最佳实践: 项目初始化 使用 Vue CLI 或 Vite 创建项目:…

vue实现uuid

vue实现uuid

使用 uuid 库生成 UUID 在 Vue 项目中,可以使用 uuid 库来生成 UUID。安装依赖: npm install uuid 在 Vue 组件中使用: import { v4 as…

vue实现框选

vue实现框选

Vue 实现框选功能 在 Vue 中实现框选功能通常需要监听鼠标事件,计算选区范围,并根据选区范围高亮或选中元素。以下是实现框选功能的关键步骤。 监听鼠标事件 在 Vue 模板中,为容器元素绑定鼠标…

vue实现单击

vue实现单击

Vue 实现单击事件的方法 在 Vue 中实现单击事件可以通过 v-on 指令或简写的 @ 符号绑定事件处理器。以下是几种常见的实现方式: 基础用法 通过 v-on:click 或 @click 绑…