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

.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
分享给朋友:

相关文章

vue实现计时

vue实现计时

Vue 实现计时功能 在 Vue 中实现计时功能可以通过多种方式完成,以下是几种常见的方法: 使用 setInterval 实现基础计时器 通过 setInterval 和 clearInterva…

vue 实现权限

vue 实现权限

Vue 实现权限控制的方法 在 Vue 项目中实现权限控制通常涉及前端路由、组件和按钮级别的权限管理。以下是几种常见的实现方式: 路由权限控制 通过路由守卫实现权限验证,过滤用户无权访问的路由:…

vue的实现

vue的实现

Vue 的实现原理 Vue 是一个渐进式 JavaScript 框架,其核心实现主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是 Vue 实现的主要技术细节。 响应式系统 Vue 的响…

vue实现markdown

vue实现markdown

Vue 实现 Markdown 编辑器 在 Vue 中实现 Markdown 编辑器可以通过集成第三方库或自定义解析器完成。以下是两种常见方法: 使用第三方库(如 marked 或 markdow…

vue实现suspense

vue实现suspense

Vue 3 中实现 Suspense Suspense 是 Vue 3 引入的一个内置组件,用于处理异步依赖的加载状态。它允许在等待异步组件或异步数据加载时显示一个后备内容(fallback),直到异…

vue实现图片

vue实现图片

Vue 实现图片功能的方法 静态图片引入 在 Vue 项目中,可以通过 src 属性直接引入静态图片。图片通常放在 public 或 assets 目录下。 <template>…