Element ui Table 分页多选

Element ui Table 分页多选

其实分页多选,重点不在于如何进行分页选择,而在于选择后如何对分页内容进行回显。

分页选择

我们先来看一下element ui 中table组件提供的两个属性
设置行的key值,顾名思义,唯一的标识啊
row-key 上图说的很清楚,需要与reserve-selection一起使用,那我们接下来再看一下reserve-selection
仅对type=selection的列有效,也就是选择列
简单点来说,reserve-selection就是当我们在切换数据时,会保留有之前选中的数据,比如上一页、下一页等。此时需要注意一点的就是:什么时候我们需要保留之前的数据,什么时候不需要,不需要的时候记得清空选中项噢!this.$refs.multipleTable.clearSelection();
我们可以先把每页选中的数据,存储在Map中,key为当前页码。
贴个代码吧!!!

        <el-table :data="deviceArr"  border stripe ref="multipleTable" @selection-change="handleSelectionChange" :row-key="getRowskey">
            <el-table-column type="selection" :reserve-selection="true"></el-table-column>
            <el-table-column type="index" label="#"></el-table-column>
            <el-table-column label="设备名称" prop="deviceName"></el-table-column>
            <el-table-column label="设备类型" prop="deviceType"></el-table-column>
            <el-table-column label="指标名称" prop="targetName"></el-table-column>
            <el-table-column label="指标类型" prop="targetType"></el-table-column>
        </el-table> 
        <el-pagination
            @size-change="handleSizeChange"
            @current-change="handleCurrentChange"
            :current-page="queryInfo.pageNow"
            :page-sizes="[1, 2, 5, 10]"
            :page-size="queryInfo.pageSize"
            layout="total, sizes, prev, pager, next, jumper"
            :total="total">
        </el-pagination>  
        <script>
          data() {
            return {
                deviceArr: [], //table数据
                queryInfo:{
                    pageNow :1,
                    pageSize :10
                 },
                total : 0, // 总记录数
                tableChecked : [], // 选中数据
                multipleSelectionAll: new Map(), //所有选中的数据包含跨页数据
            }
        },
        methods: {
	         getRowskey(row) {
	         	// 返回行的唯一标识 	
	            return row.targetNo;
	        },
	        //多选监听
	        handleSelectionChange(val) {
	            this.tableChecked = val;
	            this.multipleSelectionAll.set(this.queryInfo.pageNow,val);
	        },
        }
      </script>  

分页选中数据回显

	        // 获取表格数据
	        findTargetByTypeAndPage(type) {
                api.findTargetByTypeAndPage(this.queryInfo, this.deviceType, this.targetName).then(res => {
                    if(res.code != 0){
                        this.$message.error(res.msg)
                        return;
                    }
                    this.deviceArr = res.data.alDevice;
                    this.total = res.data.totalCount;
                    this.$nextTick(() => {
                    	// this.component.chartBind.alDeviceManage 是上次选中的数据
                    	// 对当前页进行数据回显
                        this.component.chartBind.alDeviceManage.forEach(row => {
                            this.deviceArr.forEach(item => {
                                if ( row.targetNo == item.targetNo ) 
                                    this.$refs.multipleTable.toggleRowSelection(item, true);
                            });
                        });
                        // 当前页选中数据存储在Map中
                        this.multipleSelectionAll.set(this.queryInfo.pageNow, this.tableChecked);
                        // 将其他页面选中数据存储在Map中
                        if ( type == 'init') this.findOthertarget();
                    });
                });
            },
            // 获取其他分页数据
            findOthertarget() {
           		// 总页码
                let totalPage = (this.total + this.queryInfo.pageSize -1) / this.queryInfo.pageSize;
                for(let i=this.queryInfo.pageNow + 1; i <= totalPage; i++) {
                    api.findTargetByTypeAndPage({pageNow: i, pageSize: this.queryInfo.pageSize}, this.deviceType, this.targetName).then(res => {
                        if(res.code == 0){
                            let datas = [];
                            this.component.chartBind.alDeviceManage.forEach(row => {
                                res.data.alDevice.forEach(item => {
                                    if ( row.targetNo == item.targetNo ) 
                                        datas.push(item);
                                });
                            });
                            this.multipleSelectionAll.set(i, datas);
                        }
                    });
                }
            },

以上就可以了,但这样做还有最大的一个弊端就是会消耗资源,因为初始化数据回显时,要把所有分页内容都获取一遍, 但暂时想不到其他的办法了,不知道还有没有更好的方法呢!如果获取了所有的分页内容的话就不需要设置reserve-selection了。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
element ui提供了一个内置的表格组件(el-table),可以帮助开发者创建数据展示的表格。在表格中对数据进行分页是很常见的需求,element ui也提供了相应的支持。 要实现element ui table分页功能,首先需要使用el-pagination组件来创建一个分页器。在el-table组件上添加一个v-bind:pagination属性,将分页器绑定到表格上。然后,通过设置el-table的属性项来配置分页功能,例如设置el-table的属性项v-bind:data,表示要展示的数据。可以从服务器端异步获取数据,也可以直接通过v-bind:data绑定本地的数据源。 在el-table上设置v-bind:page-size属性,表示每页显示的数据条数,并通过v-bind:current-page属性来设置当前所在页码。此外,还可以通过v-bind:total属性来设置数据总条数,用于计算总页数。 当分页器的页码或每页显示条数发生改变时,可以通过监听事件来获取新的数据然后更新到el-table中。可以监听el-table的@size-change事件和@current-change事件,分别表示每页显示条数和页码的变化。在事件处理函数中,可以修改v-bind:page-size和v-bind:current-page的值,并重新加载数据。 通过上述步骤,就可以实现element ui table分页功能了。这种分页方式非常方便,可以根据实际需求快速配置并展示数据。同时,element ui还提供了其他一些参数配置,例如可以设置显示的页码按钮数量、是否显示跳转到指定页码的输入框等,根据实际需求进行配置即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值