vue3如何使用element-plus的el-table组件展示图片表格

由于图片展示需要用到当前行的图片地址,然后配合img标签进行展示,el-table-column不能直接展示图片,所以这个问题该如何解决呢?如何不借助v-for直接拿到当前行的数据呢?

想了半天没想出来,翻来覆去查资料都没看懂,后面发现了一个v-slot内置指令,这个用于声明具名插槽或是期望接收 props 的作用域插槽。有了这个,我们就可以获取当前展示行的数据内容了。

展示效果:

不过后来细看element-plus官网,发现其实人家官网对这个问题还专门有了一个解答了,在el-table部分的最底下那,(`#`为v-slot的缩写)


 

以下是我的代码+讲解:

script:

(图片地址是网上随手找来的,都是一样的,只是来模拟一下要展示的数据)

const dataList = ref([
    {
        imgUrl: "https://ts2.cn.mm.bing.net/th?id=OIP-C.SQmqQt18WUcWYyuX8fGGGAHaE8&w=306&h=204&c=8&rs=1&qlt=90&o=6&dpr=2&pid=3.1&rm=2"
    },
    {
        imgUrl: "https://ts2.cn.mm.bing.net/th?id=OIP-C.SQmqQt18WUcWYyuX8fGGGAHaE8&w=306&h=204&c=8&rs=1&qlt=90&o=6&dpr=2&pid=3.1&rm=2"
    },
    {
        imgUrl: "https://ts2.cn.mm.bing.net/th?id=OIP-C.SQmqQt18WUcWYyuX8fGGGAHaE8&w=306&h=204&c=8&rs=1&qlt=90&o=6&dpr=2&pid=3.1&rm=2"
    },
    {
        imgUrl: "https://ts2.cn.mm.bing.net/th?id=OIP-C.SQmqQt18WUcWYyuX8fGGGAHaE8&w=306&h=204&c=8&rs=1&qlt=90&o=6&dpr=2&pid=3.1&rm=2"
    },
    {
        imgUrl: "https://ts2.cn.mm.bing.net/th?id=OIP-C.SQmqQt18WUcWYyuX8fGGGAHaE8&w=306&h=204&c=8&rs=1&qlt=90&o=6&dpr=2&pid=3.1&rm=2"
    },

])

 template:

<el-table :data="dataList" :border="true">
                <el-table-column type="index" width="50px"></el-table-column>
                <el-table-column label="图片" width="150px">
                    <template #default="scope">
                        <el-image :src="scope.row.imgUrl"></el-image>
                    </template>
                </el-table-column>
            </el-table>

scope接收作用域,scope.row则为当前展示行的数据,scope.row.imgUrl则为当前展示行的图片地址。拿到了图片地址,我们就可以直接在里面借助img标签对图片进行展示了。

这种用法当然不局限于展示图片,既然知道了如何获取当前展示行的数据,我们就能够自定义展示效果了。比如同时展示图片与图片描述

只需要将自定义内容加在template中就行了

<el-table :data="dataList" :border="true">
                <el-table-column type="index" width="50px"></el-table-column>
                <el-table-column label="图片" width="150px">
                    <template #default="scope">
                        <el-image :src="scope.row.imgUrl" style="width:100px ;"></el-image>
                        <div style="text-align: center;width: 100px;">美景</div>
                    </template>
                </el-table-column>
            </el-table>

### 如何在 Vue3使用 Element-Plus 的 `el-table` 实现 `toggleSelection` 功能 在 Vue3Element-Plus 中,`el-table` 提供了一个用于控制行选中的方法 `toggleRowSelection`。此方法允许开发者动态地设置某一行是否被选中。以下是关于如何正确实现该功能的具体说明。 #### 方法描述 当调用 `toggleRowSelection(row, selected)` 时: - 参数 `row` 是要操作的数据对象。 - 参数 `selected` 是一个布尔值,表示是否选中当前行。如果未提供,则会切换其选中状态[^1]。 为了确保 `toggleRowSelection` 正常工作,需注意以下几点: 1. 表格组件实例必须通过模板上的 `ref` 属性绑定到变量上。 2. 数据源应具有唯一键字段(通常为 `id`),并将其传递给 `<el-table>` 的 `row-key` 属性。 3. 如果需要批量处理多条记录的选择状态更改,可以通过遍历目标数组逐一应用 `toggleRowSelection` 方法。 #### 示例代码 下面展示了一段完整的示例代码来演示如何利用上述逻辑完成所需的功能: ```vue <template> <div> <el-button @click="handleToggleAll">全选/取消</el-button> <el-table ref="multipleTableRef" :data="tableData" style="width: 100%" row-key="id"> <el-table-column type="selection" width="55"></el-table-column> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> </el-table> </div> </template> <script lang="ts"> import { defineComponent, ref } from &#39;vue&#39;; export default defineComponent({ setup() { const tableData = [ { id: 1, name: &#39;张三&#39;, age: 28 }, { id: 2, name: &#39;李四&#39;, age: 24 }, { id: 3, name: &#39;王五&#39;, age: 30 } ]; const multipleTableRef = ref(null); const handleToggleAll = () => { let allRowsSelected = true; // 判断是否有任意一项未被选中 if (multipleTableRef.value?.getSelectionRows().length !== tableData.length) { allRowsSelected = false; } // 遍历每一行数据进行统一的操作 tableData.forEach((row) => { multipleTableRef.value.toggleRowSelection(row, !allRowsSelected); }); }; return { tableData, multipleTableRef, handleToggleAll }; } }); </script> ``` 在此例子中定义了一个按钮用来触发全部选择或者清除所有选择的动作。每当点击这个按钮的时候都会检查目前的状态——即判断现在是不是所有的项目都已经处于选定状态;如果不是的话就执行一次全面的勾选动作反之则清空现有的标记[^2]^。 另外值得注意的是,在实际开发过程中可能会遇到一些同步问题比如 DOM 更新滞后等情况影响最终效果因此建议适当引入 `$nextTick()` 来解决此类潜在隐患[^3]^.
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值