当前位置:首页 > VUE

使用vue实现分页查询

2026-01-20 21:50:45VUE

使用 Vue 实现分页查询

核心组件与逻辑

分页查询通常需要结合后端 API 和前端组件实现。以下是一个基于 Vue 3 的完整实现方案:

数据准备与状态管理

在 Vue 组件中定义分页相关数据:

data() {
  return {
    currentPage: 1,      // 当前页码
    pageSize: 10,       // 每页条数
    totalItems: 0,      // 总数据量
    tableData: [],      // 当前页数据
    loading: false      // 加载状态
  }
}

分页请求方法

创建获取分页数据的方法:

使用vue实现分页查询

methods: {
  async fetchData() {
    this.loading = true;
    try {
      const res = await axios.get('/api/data', {
        params: {
          page: this.currentPage,
          size: this.pageSize
        }
      });
      this.tableData = res.data.list;
      this.totalItems = res.data.total;
    } finally {
      this.loading = false;
    }
  }
}

分页组件集成

使用 Element UI 的分页组件(或其他 UI 库):

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

事件处理

实现分页相关事件处理:

使用vue实现分页查询

methods: {
  handlePageChange(val) {
    this.currentPage = val;
    this.fetchData();
  },
  handleSizeChange(val) {
    this.pageSize = val;
    this.fetchData();
  }
}

初始化加载

在 mounted 钩子中触发首次数据加载:

mounted() {
  this.fetchData();
}

完整组件示例

<template>
  <div>
    <el-table :data="tableData" v-loading="loading">
      <!-- 表格列定义 -->
    </el-table>

    <el-pagination
      background
      :current-page="currentPage"
      :page-size="pageSize"
      :total="totalItems"
      layout="prev, pager, next, sizes, jumper"
      @current-change="handlePageChange"
      @size-change="handleSizeChange"
    />
  </div>
</template>

<script>
import axios from 'axios';

export default {
  data() {
    return {
      currentPage: 1,
      pageSize: 10,
      totalItems: 0,
      tableData: [],
      loading: false
    }
  },
  methods: {
    async fetchData() {
      this.loading = true;
      try {
        const res = await axios.get('/api/data', {
          params: {
            page: this.currentPage,
            size: this.pageSize
          }
        });
        this.tableData = res.data.list;
        this.totalItems = res.data.total;
      } finally {
        this.loading = false;
      }
    },
    handlePageChange(val) {
      this.currentPage = val;
      this.fetchData();
    },
    handleSizeChange(val) {
      this.pageSize = val;
      this.fetchData();
    }
  },
  mounted() {
    this.fetchData();
  }
}
</script>

后端 API 要求

后端接口需要支持以下参数:

  • page: 当前页码
  • size: 每页数据量 返回格式建议:
    {
    "list": [...],  // 当前页数据数组
    "total": 100    // 总数据量
    }

自定义样式

可以通过 CSS 调整分页组件样式:

.el-pagination {
  margin-top: 20px;
  text-align: right;
}

注意事项

  1. 确保在页码/页数变更时重置当前页码为1
  2. 添加防抖处理高频操作
  3. 处理网络请求错误情况
  4. 在路由变化时保持分页状态可以考虑使用 vuex 或 localStorage

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

相关文章

订单 vue实现

订单 vue实现

Vue 实现订单功能 数据模型设计 订单功能通常需要设计以下数据结构: // 订单数据结构 const order = { id: '', // 订单ID userId:…

vue实现页面截屏

vue实现页面截屏

使用html2canvas库实现截屏 html2canvas是一个流行的JavaScript库,可以将DOM元素转换为Canvas图像。在Vue项目中安装html2canvas: npm inst…

vue实现一个系统

vue实现一个系统

Vue 系统实现步骤 项目初始化与配置 使用 Vue CLI 或 Vite 创建项目: npm init vue@latest my-system 选择需要的配置(Router、Pinia 等)。…

vue实现菜单栏锚点

vue实现菜单栏锚点

实现锚点菜单的基本思路 在Vue中实现菜单栏锚点功能,主要涉及两个方面:创建可跳转的锚点位置,以及菜单项的点击滚动控制。通过监听滚动事件可以高亮当前可见区域的对应菜单项。 创建页面锚点位置 在需要跳…

vue 实现toast

vue 实现toast

vue 实现 toast 的方法 在 Vue 中实现 Toast 提示功能可以通过多种方式,以下是几种常见的实现方法: 使用第三方库 Vue 生态中有许多成熟的 Toast 库,例如 vue-to…

vue实现跑车

vue实现跑车

Vue 实现跑车动画效果 使用 Vue 结合 CSS 动画可以实现跑车在屏幕上移动的效果。以下是一个完整的实现方案: 创建 Vue 组件结构 <template> <div c…