若依 elementui el-table 父子表展示数据

el-table父子表展示数据

最终实现的效果。

实现原理:参考el官方的展开行案例。 

    <el-table-column type="expand">
      <template slot-scope="props">
        <el-form label-position="left" inline class="demo-table-expand">
          <el-form-item label="商品名称">
            <span>{{ props.row.name }}</span>
          </el-form-item>
          <el-form-item label="所属店铺">
            <span>{{ props.row.shop }}</span>
          </el-form-item>
          <el-form-item label="商品 ID">
            <span>{{ props.row.id }}</span>
          </el-form-item>
          <el-form-item label="店铺 ID">
            <span>{{ props.row.shopId }}</span>
          </el-form-item>
          <el-form-item label="商品分类">
            <span>{{ props.row.category }}</span>
          </el-form-item>
          <el-form-item label="店铺地址">
            <span>{{ props.row.address }}</span>
          </el-form-item>
          <el-form-item label="商品描述">
            <span>{{ props.row.desc }}</span>
          </el-form-item>
        </el-form>
      </template>
    </el-table-column>

在父table中加一个<el-table-column type=“expand”。不同的是,demo中是一个el-form,改成el-talbe即可。代码如下。

    <el-table v-loading="loading" :data="broodmList" @selection-change="handleSelectionChange"
      row-key="brebatchnum" @expand-change="expandChange">
      <el-table-column type="selection" width="55" align="center" />
      <el-table-column type="expand" >
        <template slot-scope="props">
            <el-table :data="props.row.breBroodsList" size="mini" style="width: 92%;margin-left: 8%;">
              <el-table-column label="舍号" prop="houseid">
                <template #default="{ row }">
                  <span>{{ formatHouse(row.houseid)}}</span>
                </template>
              </el-table-column>
              <el-table-column label="公鸡数" prop="malenum"></el-table-column>
              <el-table-column label="母鸡数" prop="femalenum"></el-table-column>
              <el-table-column label="备注" prop="remark"></el-table-column>
            </el-table>
        </template>
      </el-table-column>
      <el-table-column label=" 锁定" align="center" prop="locked" >

 把子表的size 设为mini。宽度92%,margine-left 8%。这样子表小一些,与父表的行错开一点距离,层次结构更明显一些。

在若依中,父table返回的是一个list,这里我返回的是broodmList,每一行数据中还有一个子表list,我这里是breBroodsList。结构如下。

 

用代码生成器返回的父表list中子list 是 null。也可以修改xml,直接返回完整的数据。

这里就不改了。根据每行数据的ID查询得到该行的完整数据,再设置到父表的list中,即给breBroodsList赋值。

展开行时,会触发 expan-change事件。自定义一个expandChange方法。@expand-change="expandChange"

      /**点击主表格行,获取子表格明细**/
      expandChange(val){
        const brebatchnum= val.brebatchnum;
        if(val.breBroodsList == null){
          console.log("get")
          getBroodm(brebatchnum).then(res=>{
          this.$set(val,'breBroodsList',res.data.breBroodsList)})
        }
      },

此方法会传入一个参数,console.log(val)可知,这是这一行的数据。从中得到ID,我这里的ID是brebatchnum。根据ID可以得到这一条记录的完整数据。

用this.$set,将子表list放入主表中。

这里加一个判断。判断子表list是否为null,为null时再去请求。

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用 Element UI 的 `el-table` 实现父子展示数据,且两个格都带分页,可以按照以下步骤进行: 1. 创建一个父组件(ParentTable),内部包含两个子组件(ChildTable1、ChildTable2)。 2. 在父组件的模板中,使用 `el-table` 组件来展示数据,并使用 `el-pagination` 组件来实现分页功能。为每个格设置唯一的 `ref`,用于后续操作。 3. 在父组件的脚本中,定义两个数据属性,分别用于存储子格的数据和分页信息。 4. 在父组件的 `mounted` 钩子函数中,通过接口请求获取子格的数据,并将数据存储到对应的数据属性中。 5. 在子组件的模板中,使用 `el-table` 组件来展示数据,并使用 `el-pagination` 组件来实现分页功能。为每个格设置唯一的 `ref`,用于后续操作。 6. 在子组件的脚本中,接收父组件传递的数据和分页信息作为 props。 7. 在子组件的 `mounted` 钩子函数中,将传入的数据赋值给子格的数据属性,并根据传入的分页信息进行分页逻辑处理。 8. 当用户切换分页或进行其他操作时,在子组件中触发相应的事件,并通过接口请求获取对应的数据,并更新子格的数据和分页信息。 9. 在父组件的脚本中,通过调用子组件的方法,实现父子组件之间的通信,例如子格的分页切换操作触发父组件更新数据的函数。 通过以上步骤,你可以实现一个包含父子格的功能,并且每个格都带有分页功能。请根据实际情况调整代码和接口请求逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值