当前位置:首页 > VUE

vue结合pagehelper实现分页

2026-01-22 06:19:11VUE

Vue 结合 PageHelper 实现分页

在 Vue 前端框架中结合后端 PageHelper 分页插件实现分页功能,通常需要前后端协作完成。以下是具体实现步骤:

后端实现(Spring Boot + PageHelper)

在 Spring Boot 项目中配置 PageHelper 并实现分页接口:

  1. 添加 PageHelper 依赖到 pom.xml

    <dependency>
     <groupId>com.github.pagehelper</groupId>
     <artifactId>pagehelper-spring-boot-starter</artifactId>
     <version>最新版本</version>
    </dependency>
  2. 创建分页查询接口:

    @GetMapping("/users")
    public PageInfo<User> getUsers(@RequestParam(defaultValue = "1") int pageNum, 
                               @RequestParam(defaultValue = "10") int pageSize) {
     PageHelper.startPage(pageNum, pageSize);
     List<User> users = userService.getAllUsers();
     return new PageInfo<>(users);
    }

前端实现(Vue + Axios)

在 Vue 项目中通过 Axios 调用分页接口并处理分页数据:

  1. 安装 Axios:

    npm install axios
  2. 创建分页组件:

    
    <template>
    <div>
     <table>
       <tr v-for="item in tableData" :key="item.id">
         <td>{{ item.name }}</td>
         <!-- 其他字段 -->
       </tr>
     </table>
    
     <el-pagination
       @size-change="handleSizeChange"
       @current-change="handleCurrentChange"
       :current-page="currentPage"
       :page-sizes="[10, 20, 30, 50]"
       :page-size="pageSize"
       layout="total, sizes, prev, pager, next, jumper"
       :total="total">
     </el-pagination>
    </div>
    </template>
import axios from 'axios';

export default { data() { return { tableData: [], currentPage: 1, pageSize: 10, total: 0 } }, created() { this.fetchData(); }, methods: { fetchData() { axios.get('/api/users', { params: { pageNum: this.currentPage, pageSize: this.pageSize } }).then(response => { this.tableData = response.data.list; this.total = response.data.total; }); }, handleSizeChange(val) { this.pageSize = val; this.fetchData(); }, handleCurrentChange(val) { this.currentPage = val; this.fetchData(); } } }

```

关键点说明

  1. PageHelper 在后端会自动拦截 MyBatis 查询,添加 LIMIT 子句实现物理分页

  2. PageInfo 对象包含分页信息:

  • list:当前页数据列表
  • total:总记录数
  • pageNum:当前页码
  • pageSize:每页大小
  • pages:总页数
  1. 前端分页组件(如 Element UI 的 el-pagination)通过 current-change 和 size-change 事件触发数据重新加载

  2. 前后端分页参数保持一致:

  • pageNum 对应 currentPage
  • pageSize 对应每页显示条数

优化建议

  1. 后端可以封装统一的分页响应对象,包含数据列表和分页信息

  2. 前端可以添加加载状态提示,提升用户体验

  3. 对于大数据量可以考虑添加滚动加载功能

  4. 分页参数可以存储在 Vuex 中实现跨组件共享

vue结合pagehelper实现分页

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

相关文章

vue 路由实现

vue 路由实现

Vue 路由实现方法 安装 Vue Router 使用 npm 或 yarn 安装 Vue Router 依赖包: npm install vue-router # 或 yarn add vue-…

vue如何实现放大缩小

vue如何实现放大缩小

Vue实现放大缩小功能的方法 在Vue中实现元素的放大缩小功能,可以通过CSS变换、第三方库或直接操作DOM样式来实现。以下是几种常见的方法: 使用CSS transform属性 通过绑定Vue的d…

vue实现下拉分页思想

vue实现下拉分页思想

实现下拉分页的核心思想 下拉分页(无限滚动)的核心是通过监听滚动事件,在用户滚动到接近底部时自动加载下一页数据。Vue中可以通过结合v-for渲染列表、计算滚动位置以及管理分页状态来实现。 监听滚动…

vue里实现增删改查

vue里实现增删改查

在Vue中实现增删改查 数据初始化 在Vue组件的data中定义初始数据和表单绑定的变量: data() { return { items: [ { id: 1, name…

vue实现绑卡的原理

vue实现绑卡的原理

Vue 实现绑卡的原理 Vue 实现绑卡功能通常涉及前端表单处理、数据绑定、验证以及和后端 API 的交互。以下是实现绑卡功能的核心原理和步骤: 数据绑定与表单处理 Vue 通过 v-model…

vue实现一个标签选择

vue实现一个标签选择

Vue 标签选择组件实现 基础实现 使用 Vue 的 v-for 和 v-model 指令可以快速实现标签选择功能: <template> <div class="tag-se…