vue el-table expand只展开一行,且选中行可以关闭

看大家写的都是必须展开一行,选中行再次点击无法关闭,在此做个记录

代码如下:

<el-table :data="tableData"
           :tree-props="{childern:'children'}"
            :row-key="getRowKey"
            :expand-row-keys="expands"
            :@expand-change="expandChange">
</el-table>
//数据
data(){
 return{
    getRowKey(row){
        return row.id
        },
    expands:[],
    rowId:''
 }
},
// 方法
methode(){
    expandChange(row,expandedRows){
        this.expands=[]
        if(row.id!==this.rowId){
            this.expands.push(row.id)
            this.rowId=row.id
        }else{
            this.rowId = ''
        }
    }


}

1.必要的两个参数和一个方法,expand-row-keys通过该属性设置table目前的展开行,需要设置row-key属性才能使用,该属性为展开行的keys数组。

2.row-key,该行的唯一标识,我这里示例写的id,这个要自行修改接

3.方法expand-change对某一行展开或者关闭的时候触发该事件

总结:重点就是这个方法,该方法可实现点击同一行时可关闭打开。额外定义一个rowId,当旧的id与新的id相等的时候置空expands数组,且重置旧id,实现点击同一行可关闭,在此点击时旧id与新id不再相同,可再次打开

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
可以使用`el-table`的`expand-row-keys`属性来实现展开,并在展开中再嵌套一个`el-table`来实现嵌套表格的效果。具体实现步骤如下: 1. 在父组件中引入`el-table`和需要展示的子组件。 ``` <template> <el-table :data="tableData" :expand-row-keys="expandRowKeys"> <!-- 父表格的列 --> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> <el-table-column type="expand"> <!-- 展开中嵌套的子表格 --> <child-table></child-table> </el-table-column> </el-table> </template> <script> import ChildTable from './ChildTable.vue' export default { components: { ChildTable }, data() { return { tableData: [{ name: '张三', age: 18 }, { name: '李四', age: 20 }], expandRowKeys: [] } } } </script> ``` 2. 在子组件`ChildTable`中也使用`el-table`来展示数据。 ``` <template> <el-table :data="tableData"> <el-table-column prop="subject" label="科目"></el-table-column> <el-table-column prop="score" label="分数"></el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [{ subject: '语文', score: 90 }, { subject: '数学', score: 85 }] } } } </script> ``` 3. 在父组件中监听展开的事件,并记录展开的`key`值,用于判断哪些需要展开子表格。 ``` <template> <el-table :data="tableData" :expand-row-keys="expandRowKeys" @expand-change="handleExpandChange"> <!-- 父表格的列 --> </el-table> </template> <script> import ChildTable from './ChildTable.vue' export default { components: { ChildTable }, data() { return { tableData: [{ name: '张三', age: 18 }, { name: '李四', age: 20 }], expandRowKeys: [] } }, methods: { handleExpandChange(row, expandedRows) { // 获取展开的key值 const keys = expandedRows.map(row => row.key) // 更新展开的key值 this.expandRowKeys = keys } } } </script> ``` 这样就可以实现在`el-table`中展开,并在展开中嵌套另一个`el-table`来展示子数据的效果了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值