el-table扩展行的选中问题

在开发中遇到了一个问题:主表格中,每一行数据都有一个扩展行(扩展行通过设置主表格的type="expand"实现),并且扩展行中显示的内容又是一个表格,这就会导致,在选中主表格不同行的扩展行时,通过设置主表格el-table的选中变化事件@selection-change="handleSelectionChange",能取到选中值只有最近一次点击的子表中的,这也就是说,主表的不同行的扩展行中的表格是多个不同的表格,当选择完主表第一行扩展行的表格,再去选择第二行扩展行的表格时,第二行选择的值会将第一行覆盖掉。如图,此时能取到的选中值只有第二行扩展行表格中的选中值,第一行扩展行的选中值会被覆盖掉而消失。

为此,针对如下方式实现的多选列查了很多资料,但都没有解决。

<el-table-column type="selection"></el-table-column>

因此,改变思路,使用el-checkbox去实现多选列,代码如下:

<el-table :data="tableData">   主表
    <el-table-column type="expand" align="center" label="" width="55px" fixed>
        <template slot-scope="props">
            <el-table:data="props.row.xx">   扩展行子表
                <el-table-column align="center" width="50px">
                    <template slot="header">
                        <el-checkbox v-model="props.row.selectAll"              
                          @change="subtableSelectionChange(props.row,true)"/>
                    </template>
                    <template slot-scope="scope">
                        <el-checkbox v-model="scope.row.selected" 
                          @change="subtableSelectionChange(props.row)"/>
                    </template>
                </el-table-column>
            </el-table>
        </template>
    </el-table-column>
</el-table>

 el-checkbox的change函数如下:

subtableSelectionChange(row,isall){
        if(isall){   // 全选
          row.hwxx.forEach(d=>{
            d.selected=row.selectAll  
            
          });
        }else{   // 单选
          row.selectAll=row.hwxx.every(d=>d.selected)
        }
},

这样写了之后,只需要在子表数据中加一个selected属性即可判断数据是否被选中,不再通过子表传递的选中值。

这样做了之后,我又遇到了一个问题,在给子表数据添加selected属性时,我是直接这样做的:

this.tableData[i].xx[j].selected = true

这样赋值,在初始化页面时,复选框的页面显示没问题,但在手动点击复选框时,数据的selected的值发生变化了,但是,页面上不会刷新。为了解决这个问题,改变添加selected属性的方式:

this.$set(this.tableData[i].xx[j],'selected',true)

问题解决,初始化页面的时候,复选框显示正常,点击时,页面刷新也正常。

这样做了之后,我又又遇到了一个问题,表示全选的那个框,本来是通过selectAll属性控制选中状态的,可是selectAll的值变化了之后,全选框的页面无变化,因此,加一个key,在复选框这一列加一个key值,加在这里:

 加上::key="selectAll",就可以解决问题了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值