Element ui 中使用table组件实现分页记忆选中

我们再用vue和element-ui,或者其他的表格的时候,可能需要能记忆翻页勾选,那么实现以下几个方法就ok了

首先定义个data值

data () {
   return {
      multipleSelectionAll: [],   // 所有选中的数据包含跨页数据    idKey: ‘personId‘ // 标识列表数据中每一行的唯一键的名称(需要按自己的数据改一下)   }  
}

方法中定义以下:

methods : {           // 设置选中的方法
           setSelectRow() {
                if (!this.multipleSelectionAll || this.multipleSelectionAll.length <= 0) {
                    return;
                }
                // 标识当前行的唯一键的名称
                let idKey = this.idKey;
                let selectAllIds = [];
                let that = this;
                this.multipleSelectionAll.forEach(row=>{
                    selectAllIds.push(row[idKey]);
                })
                this.$refs.table.clearSelection();
                for(var i = 0; i < this.tableData.length; i++) {
                    if (selectAllIds.indexOf(this.tableData[i][idKey]) >= 0) {                        // 设置选中,记住table组件需要使用ref="table"
                        this.$refs.table.toggleRowSelection(this.tableData[i], true);
                    }
                }
            } ,
            // 记忆选择核心方法
            changePageCoreRecordData () {
                // 标识当前行的唯一键的名称
                let idKey = this.idKey;
                let that = this;
                // 如果总记忆中还没有选择的数据,那么就直接取当前页选中的数据,不需要后面一系列计算
                if (this.multipleSelectionAll.length <= 0) {
                    this.multipleSelectionAll = this.multipleSelection;
                    return;
                }
                // 总选择里面的key集合
                let selectAllIds = [];
                this.multipleSelectionAll.forEach(row=>{
                    selectAllIds.push(row[idKey]);
                })
                let selectIds = []
                // 获取当前页选中的id
                this.multipleSelection.forEach(row=>{
                    selectIds.push(row[idKey]);
                    // 如果总选择里面不包含当前页选中的数据,那么就加入到总选择集合里
                    if (selectAllIds.indexOf(row[idKey]) < 0) {
                        that.multipleSelectionAll.push(row);
                    }
                })
                let noSelectIds = [];
                // 得到当前页没有选中的id
                this.tableData.forEach(row=>{
                    if (selectIds.indexOf(row[idKey]) < 0) {
                        noSelectIds.push(row[idKey]);
                    }
                })
                noSelectIds.forEach(id=>{
                    if (selectAllIds.indexOf(id) >= 0) {
                        for(let i = 0; i< that.multipleSelectionAll.length; i ++) {
                            if (that.multipleSelectionAll[i][idKey] == id) {
                                // 如果总选择中有未被选中的,那么就删除这条
                                that.multipleSelectionAll.splice(i, 1);
                                break;
                            }
                        }
                    }
                })
            },
            currentChange(val){
                // 改变页的时候调用一次
                this.changePageCoreRecordData();
                ......
            },
            sizeChange(val){
                // 改变每页显示条数的时候调用一次
                this.changePageCoreRecordData();
                ......
            },
            query () {
                  // 分页查询数据方法,在成功返回数据方法里调用setSelectRow方法,使每次分页查询都能勾选中
                $.ajax({...,
                    success:(res)=>{                        ......
                        setTimeout(()=>{
                            this.setSelectRow();
                        }, 200)
                    }
                })
            }

}

如果你的是自定义组件dialog弹窗里面的表格选择,如果想每次打开想选中,那么就直接在props加一个值,然后加一个watch

props: [ "selectData"],
watch: {
    ‘selectData‘ (val) {
        this.multipleSelectionAll = val;
        }
    },

原文地址:https://www.cnblogs.com/wanglu/p/9160416.html

时间: 2024-08-03 00:31:22

Element ui 中使用table组件实现分页记忆选中的相关文章

Element UI 中被隐藏的滚动条

Element UI 官网中有用到自定义的滚动条组件,但是发布的所有版本中都不曾提及,个中原因我们不得而知,不过我们还是可以拿过来引用到自己的项目中. 使用的时候,放在 <el-scrollbar></el-scrollbar> 标签内即可如: <div style="height:100%"> <el-scrollbar class="m-scroll" style="height:100%">

◆◆0如何在smartform中的table节点插入分页

众所周知,在smartforms的loop节点中可以插入一个command node用来强制分页,那么如何在table节点中插入分页的command node呢? 下面简单介绍一下,这要利用到table节点的sort event,如下: 在table节点的data tab页中勾上event on sort end,别忘了输入要排序的字段,然后就会在左边table节点的最后出现一个Event on Sort End的节点,在这个下面插入command node进行分页就可以了. 值得注意的是: 1

使用element中的table组件,如何单击某一行数据时选中对应的复选框

<el-table @row-click="clickRow" ref="moviesTable" :data="insertModel.tableData" @selection-change="handleSelectionChange"> <el-table-column type="selection" width="55"/> <el-table-

基于element ui的级联选择器组件实现的分类后台接口

今天在做资产管理系统的时候遇到一个分类的级联选择器,前端是用的element的组件,需要后台提供接口支持.     这个组件需要传入的数据结构大概是这样的,详细的可参考官方案例: [{ value: '1001', label: 'IT固定资产', children: [{ value: '100101', label: '服务器' }, { value: '100102', label: '笔记本' }, { value: '100103', label: '平板电脑' }, { value:

element ui 中的时间选择器,禁用今天以前的时间

<el-date-picker v-model="baseInfo.addTime" type="datetime" placeholder="选择时间" :picker-options="pickerOptions"></el-date-picker> pickerOptions: { disabledDate(time) { return time.getTime() < Date.now()

Ant-Design-Vue中关于Table组件的使用(初级)

1. 如何自定义表格列头: <a-table :columns="columns" :dataSource="dataSource"> <span slot="customTitle"><a-icon type="smile-o"/>Name</span> </a-table> const columns = [ { dataIndex: 'name', // 自定义

Ant-Design-Vue中关于Table组件的使用

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link type="text/css" rel="stylesheet" href="./antdesignvue1410/antd.min.css"/>

Element ui 中的表格数据格式转换

原文地址:https://www.cnblogs.com/cwzqianduan/p/8663140.html

element ui刷新页面时保留当前分页

<script > export default { data() { return { total: 100, pageSize: 5, pageNo: 1, } }, created() { this.pageNo = Number(localStorage.getItem('pagination')) || 1; this.pageChange(this.pageNo); }, beforeUpdate() { localStorage.setItem('pagination', thi