el-table树形数据全部展开和收缩(toggleRowExpansion)

本文主要讲根据element-ui文档的toggleRowExpansion实现el-table树形数据全部展开和收缩

1.页面效果

在这里插入图片描述
在这里插入图片描述

2.HTML页面展示

树形数据:直接使用element-ui的demo数据

<div>
    <el-button type="primary" @click="toggleRowExpansion">
      全部{{ isExpansion ? "收缩" : "展开" }}
    </el-button>
    <div>
      <el-table
        :data="tableData"
        style="width: 100%"
        row-key="id"
        default-expand-all
        :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
        ref="dataTreeList"
      >
        <el-table-column prop="date" label="日期" sortable width="180">
        </el-table-column>
        <el-table-column prop="name" label="姓名" sortable width="180">
        </el-table-column>
        <el-table-column prop="address" label="地址">
        </el-table-column>
      </el-table>
    </div>
  </div>

3.全部展开和收缩

根据element-ui文档的toggleRowExpansion
在这里插入图片描述
先在data里定义isExpansion为true,同时el-table的 default-expand-all默认全部展开,当点击按钮,this.isExpansion取反;

遍历得到row和布尔值isExpansion,通过ref找到table执行方法toggleRowExpansion(row, expanded)

methods: {
    // 切换数据表格树形展开
    toggleRowExpansion() {
      this.isExpansion = !this.isExpansion;
      this.toggleRowExpansionAll(this.tableData, this.isExpansion);
    },
    toggleRowExpansionAll(data, isExpansion) {
      data.forEach((item) => {
        this.$refs.dataTreeList.toggleRowExpansion(item, isExpansion);
        if (item.children !== undefined && item.children !== null) {
          this.toggleRowExpansionAll(item.children, isExpansion);
        }
      });
    },
  },
以下是一个使用 el-table 实现树形数据的简单示例: ```html <template> <el-table :data="tableData" :row-key="getRowKey" style="width: 100%"> <el-table-column type="expand"> <template slot-scope="props"> <el-table :data="props.row.children"> <el-table-column prop="name" label="名称"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> </el-table> </template> </el-table-column> <el-table-column prop="name" label="名称"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [ { name: "父节点1", age: 30, children: [ { name: "子节点1", age: 20 }, { name: "子节点2", age: 25 } ] }, { name: "父节点2", age: 35, children: [ { name: "子节点3", age: 28 }, { name: "子节点4", age: 32, children: [ { name: "孙子节点1", age: 5 }, { name: "孙子节点2", age: 3 } ] } ] } ] }; }, methods: { getRowKey(row) { return row.name; // 使用每一行的名称作为唯一标识符 } } }; </script> ``` 上面的示例中,我们使用嵌套的 el-table 组件来展示树形数据。在父节点的行上,我们使用了 `type="expand"` 的 el-table-column 组件,并在其 slot 中渲染了另一个 el-table 组件,用来展示该父节点的子节点数据。 在子节点的行上,由于没有子节点,因此不会再次渲染 el-table 组件。我们可以通过在 `getRowKey` 方法中指定一个唯一标识符来确保每一行都有一个唯一的 key 值,这样可以帮助 Vue 在渲染时更加高效。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值