场景:给列表数据中,每行根据不同状态显示不同颜色。
官方教程使用table组件中的tableRowClassName属性
<template> <el-table :data="tableData" style=" 100%" :row-class-name="tableRowClassName"> <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> <style> .el-table .warning-row { background: oldlace; } .el-table .success-row { background: #f0f9eb; } </style> <script> export default { methods: { tableRowClassName({row, rowIndex}) { if (rowIndex === 1) { return 'warning-row'; } else if (rowIndex === 3) { return 'success-row'; } return ''; } }, data() { return { tableData: [{ date: '2016-05-02', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄', }, { date: '2016-05-04', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄' }, { date: '2016-05-01', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄', }, { date: '2016-05-03', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄' }] } } } </script>
在测试过程中,此方法没有生效,百度了解到,需要使用全局属性
在elementUI中,row-class-name、row-style、cell-class-name等属性要想生效必须使用全局class才能生效。因为之前的代码都是在组件中编写的,所以去除<style scoped></style>中的scoped即可该组件中的样式变为全局属性。
试了下果然有效。
但是去掉scoped的话,scoped控制局部显示样式的,去掉的话,可能会与其他的页面有重复。
在不去掉scoped的情况,可以选择通过引用的方式。
单独写个css文件,写入样式
.el-table .warning-row { background-color: oldlace; } .el-table .success-row { background-color: #f0f9eb; }
通过引用的方式可达到全局的效果:
<style scoped> @import "../../styles/table_style.css"; .input { 170px; margin-left: 10px; } .btn { display: flex; margin-top: 10px; margin-left: 10px; } .tab { margin-top: 10px; margin-left: 20px; } </style>