vue3 el-table 行颜色根据 字段改变

在 Vue 3 中使用 Element Plus 的 <el-table> 组件来根据某个字段改变行的颜色,可以通过自定义渲染函数或使用 row-class-name 属性来实现。以下是两种常见的方法:

方法 1:使用 row-class-name 属性

<el-table> 组件的 row-class-name 属性允许你根据行的数据动态返回一个类名,你可以在这个类名中定义颜色。

复制代码
<template>
  <el-table :data="tableData" row-class-name="rowClassName">
    <el-table-column prop="date" label="日期" width="180"></el-table-column>
    <el-table-column prop="name" label="姓名" width="180"></el-table-column>
    <el-table-column prop="address" label="地址"></el-table-column>
  </el-table>
</template>
 
<script setup>
import { ref } from 'vue';
 
const tableData = ref([
  { date: '2016-05-02', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄', type: 'A' },
  { date: '2016-05-04', name: '张小刚', address: '上海市普陀区金沙江路 1517 弄', type: 'B' },
  // 更多数据...
]);
 
const rowClassName = ({ row, rowIndex }) => {
  if (row.type === 'A') {
    return 'row-color-a';
  } else if (row.type === 'B') {
    return 'row-color-b';
  }
  return ''; // 默认返回空字符串,不应用任何特殊样式
};
</script>
 
<style>
.row-color-a {
  background-color: #f0f9eb; /* 例如,类型A的行背景色 */
}
.row-color-b {
  background-color: #ebf4fa; /* 例如,类型B的行背景色 */
}
</style>

方法 2:使用自定义渲染函数

如果你需要更复杂的行样式控制,可以使用 <el-table-column>render 函数来自定义每一行的渲染。

复制代码
<template>
  <el-table :data="tableData">
    <el-table-column prop="date" label="日期" width="180"></el-table-column>
    <el-table-column prop="name" label="姓名" width="180"></el-table-column>
    <el-table-column prop="address" label="地址"></el-table-column>
    <el-table-column label="操作" width="100">
      <template #default="{ row, rowIndex }">
        <div :class="getRowClass(row)">{{ row.type }}</div>
      </template>
    </el-table-column>
  </el-table>
</template>
 
<script setup>
import { ref } from 'vue';
 
const tableData = ref([
  { date: '2016-05-02', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄', type: 'A' },
  { date: '2016-05-04', name: '张小刚', address: '上海市普陀区金沙江路 1517 弄', type: 'B' },
  // 更多数据...
]);
 
const getRowClass = (row) => {
  if (row.type === 'A') {
    return 'row-color-a';
  } else if (row.type === 'B') {
    return 'row-color-b';
  }
  return ''; // 默认返回空字符串,不应用任何特殊样式
};
</script>
 
<style>
.row-color-a {
  background-color: #f0f9eb; /* 例如,类型A的行背景色 */
}
.row-color-b {
  background-color: #ebf4fa; /* 例如,类型B的行背景色 */
}
</style>

这两种方法都可以根据字段。

相关推荐
胡萝卜术7 小时前
从API调用到手写LRU:力扣146「LRU缓存」的哈希表+双向链表终极进化之路
前端·javascript·面试
科技道人7 小时前
记录 默认置灰/禁用 app ‘Search Engine Selector‘ 的disable按钮
开发语言·前端·javascript
碎碎念_49212 小时前
SpringBoot + Vue 前后端分离从 0 到 1 完整环境配置流程
vue.js·spring boot·后端
shuaijie051813 小时前
强制修改调用接口的api地址。
javascript·vue.js·ecmascript
JerrySir13 小时前
恶意 npm 包只活了 17 分钟:技术面试里,为什么“升级依赖”还不算止血?
javascript·安全
白帽小阳13 小时前
2026前端面试题!(附答案及解析)
javascript·网络·python·安全·web安全·网络安全·护网行动
这是个栗子13 小时前
前端开发中的常用工具函数(八)
开发语言·前端·javascript
Hilaku13 小时前
Vue 和 React 真正的差距,不在语法,而在团队犯错成本
前端·javascript·程序员
研☆香13 小时前
为什么变量声明在赋值前也能使用?—— 深入理解 JavaScript 变量提升与作用域
开发语言·前端·javascript
柯克七七14 小时前
我把 bug 修得太干净了,测试组以为这个模块本来就没问题
前端·javascript·typescript