Element-UI 两个el-table多选回显交互 存在一些问题

1,290 阅读1分钟

el-table中想要两个表格的多选相互响应就要用到这些方法

screenshot-20220329-113444.png screenshot-20220329-113232.png screenshot-20220329-113315.png

<!-- 删除展示表格中的某一个 -->
<el-button @click="open">打开选项表格</el-button>
<el-button @click="delete">批量删除</el-button>

<!-- 展示表格 -->
<el-table :data="listData" ref="listTable" :row-key="getRowKey" @selection-change="getChange($event, 'list')">...</el-table>

<!-- 选项表格 -->
<el-dialog :visible.sync="dialogVisible">
    <el-table :data="selectData" ref="selectTable" :row-key="getRowKey" @selection-change="getChange($event,'select'">...</el-table>
</el-dialog>

实际使用中,toggleRowSelection会自动触发所有selection-change,导致展示表格中不仅没删掉数据,反而还增加了重复的数据

解决办法 给需要回显的selection-change加上条件判断简称:上锁

methods:{
    // 打开弹窗
    open(){
        this.dialogVisible = true
        // 获取选项表格中的数据
        this.getList()
    },
    // 表格多选
    getChange(row, key){
        if(key === 'select'){
            // 是否上锁
            if(this.flag) return
            this.listData = row
        }else{
            // 中间参数 从展示表格中选择要删除的数据
            this.deleteData = row
        }
    },
    // 批量删除
    delete(){
        // 上锁
        this.flag = true
        // 回显操作
        this.deleteData.forEach(i => {
            // 因为我们阻止了自动触发selection-change 所以要从展示表格中删掉
            this.listData.splice(i, 1)
            // 在选择表格中同步去掉勾选 toggleRowSelection也是导致自动触发多选的原因
            this.$refs.selectTable.toggleRowSelection(i)
        })
        // 结束后要解锁
        this.flag = false
    },
    getRowKey(row) {
        // 唯一标识 作为对应回显参数的依据
        return row.id
    }
}

若有更好的方法也请告诉我