el-table 放入图片,使用 v-if 的情况下如何处理 v-slot

这篇博客介绍了在 Vue 中使用 Element UI 的 el-table 组件显示图片时遇到的问题,当使用 v-for 循环生成表格列时,图片只能在特定列显示,而其他列的 prop 失效。为了解决这个问题,作者提出了两种解决方案:一是为每个列单独编写模板,二是使用 v-if 判断。最后,通过优化 v-if 结构,实现了在指定列显示图片的同时保持其他列正常工作。
摘要由CSDN通过智能技术生成

el-table如果单纯的处理字符信息,只需要使用prop就可以解决了。
但是,如果想要放入图片,就必须使用 v-slot 取得组件传回来的 row.url,如果是单独写的 el-table-column ,直接拿就行了。
但如果使用 v-for 循环出来的 el-table-column ,还得加判断才能决定放在哪一行。

<template>
  <div>
    <el-table :data="list">
      <el-table-column
        v-for="(col, index) in columns"
        :key="index"
        :prop="col.prop"
        :type="col.type"
      >
        <template v-slot="{ row }">
          <img v-if="index==2" :src="row.url" alt="" />
        </template>
      </el-table-column>
    </el-table>
  </div>
</template>

<script>
export default {
  data() {
    return {
      list: [
        {name: "he", age: 18, sex: "male",
          url: "https://img0.baidu.com/it/u=2862534777,914942650&fm=253&fmt=auto&app=138&f=JPEG?w=889&h=500",
        },
        {name: "qi",age: 20,sex: "female",
          url: "https://img0.baidu.com/it/u=530426417,2082848644&fm=253&fmt=auto&app=138&f=JPEG?w=889&h=500",
        },
        {name: "ming", age: 25, sex: "male",
          url: "https://img2.baidu.com/it/u=1814268193,3619863984&fm=253&fmt=auto&app=138&f=JPEG?w=632&h=500",
        },
      ],
      columns: [
        { label: "000", type: "index" },
        { label: "111", prop: "name" },
        { label: "222", prop: "age" },
        { label: "333", prop: "sex" },
      ],
    };
  },
};
</script>

此时就出现问题了,除了 index=2 的图片出来以外,其他单元格的prop失效了。
以上代码效果
解决个问题,只能不用prop,全部在 template 里用v-if判断

<template v-slot="{ row }">
  <span v-if="index == 0">{{ row.name }}</span>
  <span v-if="index == 1">{{ row.age }}</span>
  <img v-if="index == 2" :src="row.url" alt="" />
  <span v-if="index == 3">{{ row.sex }}</span>
</template>

el-table 放入图片,出现这种问题的两种解决办法

  1. 不使用 v-for 遍历出来的 column ,每一个 column 都单独写出来,但如果有100个column怎么办?
  2. 使用上面的方法,但如果有100个column,就需要写一百次v-if

后续更新,以下方法可行

<template v-slot="{ row }" v-if="index==2||index==3">
  <img v-if="index==2"  :src="row.url" alt="" />
  <img v-else-if="index==3">
</template>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值