element table自定义动态表头以及动态渲染下的插槽slot-scope

本文介绍了如何在Vue.js中实现动态表格渲染,包括通过`v-for`指令动态生成表头,以及使用`slot-scope`进行复杂内容的条件渲染。示例代码展示了如何设置表格样式、绑定数据,并根据表头数据展示对应的列属性。同时,详细解释了`scope.row`和`scope.column.property`在表格渲染中的作用,帮助理解动态表格数据绑定和插槽的使用技巧。

一、动态表头

废话不多说直接上源码

 <el-table
            :data="TableSalaryList"
            height="92%"
            border
            stripe
            style="width: 100%"
            @row-dblclick="touchSalary"
            :header-cell-style="{ 'text-align': 'center' }"
          >
            <el-table-column type="selection" width="55"> </el-table-column>
            <el-table-column v-for="(list,index) in TableSalaryHeadList"
             :key="index"             
             :label="list.label"
             :property="list.property"
             :width="list.style">
            </el-table-column>
</el-table>

需要一个table的整体数据数组TableSalaryList,还要一个表头的数据数组TableSalaryHeadList

重要的是

<el-table-column v-for="(list,index) in TableSalaryHeadList" :key="index" :label="list.label" :property="list.property" :width="list.style">

将表头数据循环,指定label显示的值,以及property当前列展示的属性值

我的表头数据是这样的

这里的lable是需要展示的表头值,property值是和数组数据TableSalaryList的键名一样用来展示当前列的值,style可以指定当前列的宽度。

效果图

二、动态渲染下的插槽slot-scope

先放一段源码

<template slot-scope="scope">
                            <span v-if="scope.column.label === '人员类型'">{{scope.row.empType === "01" ? "在职" : "离退"}}</span>
                            <span
                                v-else-if="scope.column.label === '状态'"
                            >{{scope.row.state === "0" ? "未发送" : scope.row.state === "1" ? "处理中" : scope.row.state === "2" ? "支付成功" : scope.row.state === "3" ? "支付失败" : "作废"}}</span>
                            <span v-else>{{scope.row[scope.column.property]}}</span>
</template>

scope.row

可以单独{{scope.row}}看下,一下子就会明白,可以根据里面的属性进行相应的判断操作,

scope.row[scope.column.property]

这个就会显示你表里面循环的值

  自己学习的笔记,如果写错了,欢迎大佬指点。

### 使用 `el-table` 组件实现自定义表头筛选渲染Element UI 中,可以通过配置 `el-table-column` 来实现自定义表头并加入筛选功能。具体来说,在 `el-table-column` 上可以设置 `filters`, `filter-method` 和其他属性来定制化表头的行为。 对于更复杂的场景,比如希望完全控制表头的内容和行为,则可以利用作用域插槽 (Scoped Slot),即通过 `<template slot-scope>` 或者简化的写法 `<template #header>...</template>` 定义表头区域内的 HTML 结构以及交互逻辑[^1]。 下面是一个简单的例子展示如何创建带有过滤器的列,并且允许用户输入关键字来进行模糊匹配: ```html <template> <div class="app-container"> <!-- 表格 --> <el-table :data="tableData" style="width: 100%"> <!-- 自定义表头 --> <el-table-column prop="name" label="姓名"> <template #header="{ column }"> <span>{{ column.label }}</span> <input type="text" placeholder="请输入..." v-model="searchName"/> </template> </el-table-column> <el-table-column prop="address" label="地址"></el-table-column> <!-- 增加一个具有内置筛选选项的列 --> <el-table-column prop="tag" label="标签" :filters="[{ text: '家', value: '家' }, { text: '公司', value: '公司' }]" :filter-method="(value, row) => row.tag === value" filter-placement="bottom-end"> <template #default="scope"> <el-tag :type="scope.row.tag === '家' ? '' : 'success'" disable-transitions>{{ scope.row.tag }}</el-tag> </template> </el-table-column> </el-table> <!-- 数据源 --> <script setup lang="ts"> import { ref, computed } from "vue"; const searchName = ref(''); let tableDataRaw = [ { date: '2016-05-03', name: 'Tom', address: 'No. 189, Grove St, Los Angeles', tag: '家' }, ... ]; // 计算属性用于处理搜索框的变化 const tableData = computed(() => tableDataRaw.filter(data => !searchName.value || data.name.toLowerCase().includes(searchName.value.toLowerCase())) ); </script> </template> ``` 上述代码片段展示了两个主要部分:一个是普通的文本字段作为表头的一部分;另一个则是使用预设好的条件列表进行精确筛选的功能。此外还包含了基于 Vue.js 的响应式编程模式,使得当用户的输入发生变化时能够实时更新显示的数据集[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值