当前位置:首页 > VUE

vue page 实现分页

2026-02-17 04:45:30VUE

实现分页的基本思路

在Vue中实现分页功能通常需要结合后端API返回的分页数据(如当前页码、每页条数、总数据量等)和前端的分页控件。以下是基于Element UI的分页组件实现方案,其他UI库或自定义分页逻辑类似。

安装Element UI(若未安装)

npm install element-ui

main.js中全局引入:

import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI);

分页组件代码示例

<template>
  <div>
    <!-- 数据表格 -->
    <el-table :data="tableData" border>
      <el-table-column prop="id" label="ID"></el-table-column>
      <el-table-column prop="name" label="名称"></el-table-column>
    </el-table>

    <!-- 分页控件 -->
    <el-pagination
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
      :current-page="currentPage"
      :page-sizes="[10, 20, 50]"
      :page-size="pageSize"
      layout="total, sizes, prev, pager, next, jumper"
      :total="total">
    </el-pagination>
  </div>
</template>

<script>
export default {
  data() {
    return {
      tableData: [],   // 当前页数据
      currentPage: 1,  // 当前页码
      pageSize: 10,    // 每页条数
      total: 0         // 总数据量
    };
  },
  mounted() {
    this.fetchData();
  },
  methods: {
    fetchData() {
      // 模拟API请求,实际替换为axios调用
      const mockData = Array.from({ length: 100 }, (_, i) => ({
        id: i + 1,
        name: `项目${i + 1}`
      }));

      // 分页逻辑
      const start = (this.currentPage - 1) * this.pageSize;
      const end = start + this.pageSize;
      this.tableData = mockData.slice(start, end);
      this.total = mockData.length;
    },
    handleSizeChange(val) {
      this.pageSize = val;
      this.fetchData();
    },
    handleCurrentChange(val) {
      this.currentPage = val;
      this.fetchData();
    }
  }
};
</script>

与后端API联调

实际项目中通常需要从后端获取分页数据。以下是使用Axios的示例:

methods: {
  async fetchData() {
    try {
      const res = await axios.get('/api/data', {
        params: {
          page: this.currentPage,
          size: this.pageSize
        }
      });
      this.tableData = res.data.list;
      this.total = res.data.total;
    } catch (error) {
      console.error(error);
    }
  }
}

自定义分页组件

如果需要完全自定义分页逻辑,可以手动实现:

vue page 实现分页

<template>
  <div class="pagination">
    <button 
      v-for="page in pageCount" 
      :key="page"
      @click="goToPage(page)"
      :class="{ active: currentPage === page }">
      {{ page }}
    </button>
  </div>
</template>

<script>
export default {
  props: ['total', 'perPage'],
  data() {
    return { currentPage: 1 };
  },
  computed: {
    pageCount() {
      return Math.ceil(this.total / this.perPage);
    }
  },
  methods: {
    goToPage(page) {
      this.currentPage = page;
      this.$emit('page-changed', page);
    }
  }
};
</script>

<style>
.pagination button { margin: 0 5px; }
.pagination button.active { font-weight: bold; }
</style>

关键注意事项

  • 分页参数需与后端约定一致(通常为page/sizepageNum/pageSize
  • 处理无数据时的空状态显示
  • 大型数据集建议使用服务器端分页而非前端分页
  • 考虑添加加载状态提示(如loading动画)

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

相关文章

vue实现driver

vue实现driver

Vue 实现 Driver.js 引导功能 Driver.js 是一个轻量级的 JavaScript 库,用于在网页上创建引导式导览。以下是在 Vue 项目中集成 Driver.js 的详细方法:…

javascript实现vue

javascript实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,主要包括数据绑定、响应式系统和虚拟 DOM。以下是一个简化的实现示例。 数据响应式系统 通过 Object.de…

vue登录实现

vue登录实现

Vue 登录实现 实现登录功能通常需要前端与后端配合,Vue 作为前端框架,主要负责表单处理、请求发送和状态管理。以下是常见的实现方式: 表单设计与数据绑定 使用 Vue 的 v-model 实现表…

vue实现树形

vue实现树形

Vue 实现树形组件 在 Vue 中实现树形结构通常需要递归组件和动态数据绑定。以下是实现树形组件的几种常见方法。 递归组件实现 递归组件是 Vue 中实现树形结构的核心方法。通过组件调用自身,可以…

vue 实现协同

vue 实现协同

Vue 实现协同编辑的方案 协同编辑指多个用户同时编辑同一文档并实时同步更改。Vue 结合相关库和技术可轻松实现该功能。 使用 WebSocket 实现实时通信 WebSocket 提供全双工通信,…

vue实现绘图

vue实现绘图

Vue 实现绘图的方法 在 Vue 中实现绘图功能,可以通过多种方式实现,包括使用原生 HTML5 Canvas、第三方库(如 Fabric.js、Konva.js)或 SVG。以下是几种常见的实现方…