element ui 表格节点 expand

element ui 表格控件每次只展开一行

在项目中经常会有表格嵌套表格或者表格嵌套表单动态渲染的情况,这时候就可以使用表格的原生控件expand属性具体用法看官网文档https://element.eleme.cn/#/zh-CN/component/table,但是官网给的是点开一行,再点击下一行时上一次点开的不收起,依然打开,这样数据渲染的时候会有问题。expand - change的使用方法为当用户对某一行展开或者关闭的时候会触发该事件(展开行时,回调的第二个参数为 expandedRows;树形表格时第二参数为 expanded)同时可以调用接口 具体参考官网

代码如下

 <el-table
        v-loading="loading"
        ref="refTable"
        :data="eqTableData"
        :max-height="hight"
        :row-key="getRowKeys"   //获取当前行id
        :expand-row-keys="expands"    //只展开一行放入当前行id
        @expand-change="exChange"
      >
        <el-table-column type="expand">
          <template slot-scope="scope">
            <el-table
              ref="tableChild"
              :data="dataList"
              align="center"
            >
              <el-table-column
                align="center"
                label="时间"
                prop="recordDate"
              />
              <el-table-column
                label="参数"
                prop="param"
                min-width="50%"/>
              <el-table-column
                label="异常原因"
                prop="reason"
                min-width="50%"/>
              <el-table-column
                align="center"
                label="预计读数"
                prop="predictData"
                min-width="50%"/>
              <el-table-column
                align="center"
                label="实际读数"
                prop="actualData"
                min-width="50%"
              />
              <el-table-column
                align="center"
                label="操作"
              >
                <template slot-scope="scope">
                  <el-button
                    size="mini"
                    @click="handleIgnore(scope.$index, scope.row)">忽略</el-button>
                  <el-button
                    size="mini"
                    type="danger"
                    @click="handleCorrect(scope.$index, scope.row)">修正</el-button>
                </template>
              </el-table-column>
            </el-table>
          </template>
        </el-table-column>
        <el-table-column
          label="设备ID"
          prop="eqId"/>
        <el-table-column
          label="所在大厦"
          prop="blName"/>
        <el-table-column
          label="所在楼层"
          prop="flName"/>

      </el-table>
export default {
data() {
    return {
  //设置row-key只展示一行
 expands: [],//只展开一行放入当前行id
      getRowKeys: (row) => {/获取当前行id
        // console.log(row)
        return row.eqId   //这里看这一行中需要根据哪个属性值是id
      },
eqTableData: [],
      dataList: []
}
}
methods:{
 
exChange(row, rowList) {
      // console.log(row)
      this.loading = true
      
  var that = this
      if (rowList.length) { // 只展开一行//说明展开了
        that.expands = []
        if (row) {
          that.expands.push(row.eqId)// 只展开当前行id
        }
      //  this.tablaData(row.eqId)  这里可以调用接口数据渲染
      } else { // 说明收起了
        that.expands = []
      }
    }
}
}
原文地址:https://www.cnblogs.com/yearshar/p/11607252.html