当前位置:首页 > VUE

vue前端分页怎么实现

2026-03-06 17:26:42VUE

Vue 前端分页实现方法

使用计算属性分页

通过计算属性对数据进行分页处理,适用于数据量较小的场景。

<template>
  <div>
    <table>
      <tr v-for="item in paginatedData" :key="item.id">
        <td>{{ item.name }}</td>
      </tr>
    </table>
    <button @click="prevPage" :disabled="currentPage === 1">上一页</button>
    <span>第 {{ currentPage }} 页</span>
    <button @click="nextPage" :disabled="currentPage === pageCount">下一页</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [], // 原始数据
      currentPage: 1,
      pageSize: 10
    };
  },
  computed: {
    pageCount() {
      return Math.ceil(this.items.length / this.pageSize);
    },
    paginatedData() {
      const start = (this.currentPage - 1) * this.pageSize;
      const end = start + this.pageSize;
      return this.items.slice(start, end);
    }
  },
  methods: {
    nextPage() {
      if (this.currentPage < this.pageCount) {
        this.currentPage++;
      }
    },
    prevPage() {
      if (this.currentPage > 1) {
        this.currentPage--;
      }
    }
  }
};
</script>

使用第三方库分页

对于更复杂的分页需求,可以使用第三方库如 vue-paginateelement-ui 的分页组件。

vue前端分页怎么实现

安装 element-ui 分页组件:

npm install element-ui

使用示例:

vue前端分页怎么实现

<template>
  <div>
    <el-table :data="paginatedData">
      <el-table-column prop="name" label="名称"></el-table-column>
    </el-table>
    <el-pagination
      @current-change="handleCurrentChange"
      :current-page="currentPage"
      :page-size="pageSize"
      :total="totalItems"
      layout="prev, pager, next">
    </el-pagination>
  </div>
</template>

<script>
import { Table, TableColumn, Pagination } from 'element-ui';

export default {
  components: {
    'el-table': Table,
    'el-table-column': TableColumn,
    'el-pagination': Pagination
  },
  data() {
    return {
      items: [],
      currentPage: 1,
      pageSize: 10,
      totalItems: 0
    };
  },
  computed: {
    paginatedData() {
      const start = (this.currentPage - 1) * this.pageSize;
      const end = start + this.pageSize;
      return this.items.slice(start, end);
    }
  },
  methods: {
    handleCurrentChange(page) {
      this.currentPage = page;
    }
  },
  mounted() {
    this.totalItems = this.items.length;
  }
};
</script>

后端分页结合前端展示

对于大数据量场景,通常采用后端分页,前端仅负责展示和页码控制。

<template>
  <div>
    <table>
      <tr v-for="item in items" :key="item.id">
        <td>{{ item.name }}</td>
      </tr>
    </table>
    <el-pagination
      @current-change="fetchData"
      :current-page="currentPage"
      :page-size="pageSize"
      :total="totalItems"
      layout="prev, pager, next">
    </el-pagination>
  </div>
</template>

<script>
import axios from 'axios';

export default {
  data() {
    return {
      items: [],
      currentPage: 1,
      pageSize: 10,
      totalItems: 0
    };
  },
  methods: {
    fetchData(page = 1) {
      axios.get('/api/items', {
        params: {
          page,
          size: this.pageSize
        }
      }).then(response => {
        this.items = response.data.items;
        this.totalItems = response.data.total;
        this.currentPage = page;
      });
    }
  },
  mounted() {
    this.fetchData();
  }
};
</script>

分页样式优化

可以通过 CSS 美化分页组件,例如调整按钮间距、颜色等。

.el-pagination {
  margin-top: 20px;
  text-align: center;
}
.el-pagination button,
.el-pagination span {
  margin: 0 5px;
}

以上方法覆盖了从简单到复杂的分页需求,开发者可根据项目实际情况选择合适方案。

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

相关文章

vue实现递归

vue实现递归

Vue 实现递归组件的方法 在 Vue 中实现递归组件通常用于处理树形结构数据(如菜单、评论列表、文件目录等)。以下是具体实现方法: 定义递归组件 通过 name 选项让组件可以递归调用自身: &…

vue实现流程

vue实现流程

Vue 实现流程的基本步骤 安装 Vue.js 可以通过 CDN 引入或使用 npm/yarn 安装。 CDN 方式: <script src="https://cdn.jsdelivr.…

vue实现框架

vue实现框架

Vue 框架实现的核心方法 基础项目搭建 使用 Vue CLI 或 Vite 快速初始化项目。Vue CLI 适合传统项目,Vite 更适合现代轻量级应用。安装后通过命令行工具选择所需配置(如 Rou…

vue实现granfana

vue实现granfana

Vue 实现类似 Grafana 的仪表盘 要在 Vue 中实现类似 Grafana 的仪表盘功能,需要结合数据可视化库、状态管理和 UI 组件。以下是关键步骤和推荐工具: 数据可视化库 使用 E…

vue 实现后退

vue 实现后退

实现后退功能的方法 在Vue中实现后退功能通常需要结合浏览器历史记录API或Vue Router的导航方法。以下是几种常见的实现方式: 使用Vue Router的go方法 this.$router…

vue jwt实现

vue jwt实现

Vue JWT 实现方法 安装依赖 确保项目中安装了 jsonwebtoken(后端)和 axios(前端)。若使用 Vue 3,可搭配 vue-router 和 pinia(或 vuex)管理状态。…