当前位置:首页 > VUE

vue page 实现分页

2026-02-17 04:45:30VUE

实现分页的基本思路

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

vue page 实现分页

安装Element UI(若未安装)

npm install element-ui

main.js中全局引入:

vue page 实现分页

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);
    }
  }
}

自定义分页组件

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

<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实现下拉层级

vue实现下拉层级

Vue实现下拉层级菜单 使用Vue实现下拉层级菜单可以通过递归组件或动态渲染的方式完成。以下是两种常见实现方法: 递归组件实现 创建一个递归组件处理多级菜单结构: <template>…

vue实现通知

vue实现通知

Vue 实现通知功能的方法 使用 Vue 实现通知功能可以通过多种方式实现,以下是一些常见的方法: 使用 Vue 的全局事件总线 在 Vue 中可以通过事件总线实现通知功能。创建一个全局事件总线,然…

vue实现骰子

vue实现骰子

Vue 实现骰子功能 创建 Vue 组件 在 Vue 项目中创建一个骰子组件,例如 Dice.vue。该组件包含骰子的外观和逻辑。 <template> <div class=…

vue实现购票

vue实现购票

Vue 实现购票功能 数据结构设计 购票功能通常需要以下数据结构: 场次信息(时间、地点、价格) 座位信息(可选座位、已售座位) 用户订单信息 示例数据结构: data() { return…

vue实现slot

vue实现slot

Vue 中的 Slot 实现方法 Vue 的 slot 是一种内容分发机制,允许父组件向子组件插入内容。以下是几种常见的 Slot 实现方式: 默认 Slot 子组件通过 <slot>…

vue实现123456

vue实现123456

Vue 实现数字 123456 的显示 在 Vue 中显示数字 123456 非常简单,可以通过以下方法实现: 方法一:直接在模板中显示 <template> <div>…