Vue实现表格的翻页显示功能

本文介绍了如何在Vue项目中实现表格的分页显示。通过使用v-for循环展示表格行,根据总页数(totlepage)和每页显示的个数动态生成页码。利用current表示当前页,并通过currentHead计算每组开始的页码,head确定页码所在的组。同时,实现了currentIndexHead来控制表格行的显示。文章还提到了上一页、下一页和跳转到指定页的功能,涉及的方法包括previous、next和gopage。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Vue实现表格的翻页显示功能

先简单介绍下用到的变量含义及大致思路:
表格的tr是用v-for=(item, index) in data循环显示的
下面的显示数字页是用v-for=page in totlepage循环显示的
totlepage:一共的页数。也就是Math.ceil(数据的个数 / 每页显示的个数);
page:表示第几页。也就是下面的数组1、2、3、4、5…
current:表示当前的页数。当page==current时,给a一个active类名,标红一下。
currentHead:我将下面的数字显示分为5个一组,及12345一组,678910一组,这里的currentHead就是每组中的第一个数字,1,6,11…
head:表示当前页属于第几组,Math.floor(this.current/5),注意像5,10这样this.current%5==0的,head需要减去1
这样我们就能得到currentHead = head*5 + 1;

接下来就是控制下面页数数字的显隐

<li v-for="page in totlepage" v-show="page >= currentHead && page < currentHead+5">

currentIndexHead:这个变量和之前的currentHead差不多,这里我设置每页显示6个tr,所以currentIndexHead就是索引值1,7,13…

接下来就是控制表格tr的显隐

<tr v-for="(item,index) in data" v-model="item.id" v-show="index+1 >= currentIndexHead && index+1 < currentIndexHead+6">

然后我们需要实现翻页功能需要三个方法,上一页previous,下一页next,去到特定页gopage(page)

//跳转到指定页
      gopage: function(page) {
        this.current = page;
        var head = Math.floor(this.current/5);
        var rem = this.current % 5;
        if(rem == 0) {
          head -= 1;
        }
        if(head >= 1) {
          this.currentHead = head * 5 + 1;
        }
        this.currentIndexHead = 6*(page-1)+1;
      },
      //下一页
      next: function(){
        if(this.current < this.totlepage) {
          this.current += 1;
          var head = Math.floor(this.current/5);
          var rem = this.current % 5;
          if(rem == 0) {
            head -= 1;
          }
          if(head >= 1) {
            this.currentHead = head * 5 + 1;
          }
          this.currentIndexHead += 6;
        }
      },
      previous: function(){
        if(this.current > 1) {
          this.current -= 1;
          var head = Math.floor(this.current/5);
          var rem = this.current % 5;
          if(rem == 0) {
            head -= 1;
          }
          if(head >= 1) {
            this.currentHead = head * 5 + 1;
          }
          this.currentIndexHead -= 6;
        }
      }
### Vue 表格翻页保持选中状态的实现方法 在 Vue实现表格翻页时保存选中状态的功能,可以通过多种方式完成。以下是基于 Element UI 和 Ant Design Vue 的两种常见解决方案。 #### 使用 Element UI 实现 通过设置 `:reserve-selection="true"` 属性可以轻松实现翻页时保留选中状态的功能[^4]。此属性的作用是在分页切换时不丢失已选中的行数据。具体代码如下: ```html <template> <el-table ref="tableRef" :data="tableData" style="width: 100%" :row-key="getRowKey" :reserve-selection="true"> <el-table-column type="selection" width="55"></el-table-column> <!-- 其他列定义 --> </el-table> </template> <script> export default { data() { return { tableData: [], // 数据源 }; }, methods: { getRowKey(row) { return row.id; // 唯一标识字段 }, clearSelection() { this.$refs.tableRef.clearSelection(); // 清除所有选中项 } } }; </script> ``` 上述代码中,`get-row-key` 方法用于指定每一行的唯一键值,通常为数据库主键或其他唯一标识符。这样即使分页发生变化,也可以正确匹配并恢复之前的选择状态[^1]。 --- #### 使用 Ant Design Vue 实现 Ant Design Vue 提供了类似的机制来支持翻页时的状态保持。其核心在于合理配置 `rowSelection` 参数以及自定义逻辑处理。以下是一个完整的例子: ```html <a-table :row-key="(record) => record.id" :columns="columns" :data-source="dataSource" :pagination="pagination" @change="handleTableChange" :row-selection="rowSelectionConfig" ></a-table> ``` 其中,`rowSelectionConfig` 是一个对象,用来描述如何管理选中行为。例如: ```javascript computed: { rowSelectionConfig() { const selectedRowKeys = []; return { onChange: (selectedRowKeys, selectedRows) => { console.log('Selected Rows:', selectedRows); }, getCheckboxProps: (record) => ({ props: { disabled: false, }, }), }; }, }, methods: { handleTableChange(pagination, filters, sorter) { // 处理分页变化事件 console.log('Pagination Changed', pagination); }, } ``` 为了确保跨分页的数据一致性,可以在每次分页变更前手动存储当前选中的行 ID 列表,并在加载新数据后重新应用这些选择[^2]。 --- #### 自定义缓存方案 对于更复杂的需求(如某些特殊场景下无法直接依赖框架特性),还可以采用手动生成缓存的方式。即每当用户勾选某一行时,将其对应的唯一标识加入到全局变量或 Vuex Store 中;当页面刷新或者跳转至其他分页后再依据该集合自动标记对应条目为“已选中”。这种方法虽然稍显繁琐,但灵活性更高[^3]^。 --- ### 总结 无论是借助第三方库内置选项还是自行开发插件扩展功能模块,最终目标都是让用户获得流畅的操作体验的同时减少不必要的重复劳动成本。以上便是关于 **Vue 表格翻页保持选中状态** 几种主流解决思路及其实际应用场景分析说明文档内容摘录整理而成的结果展示形式之一而已啦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值