我們在 Element 官網(wǎng)看到的表格默認(rèn)樣式大概是這樣的:
默認(rèn)的el-table
表格無邊框
默認(rèn)的el-table-column
行信息居左展示
默認(rèn)的el-table-column
當(dāng)內(nèi)容過長也沒有溢出和顯示tooltip的效果
尤其是第三點(diǎn)的體驗(yàn)在用戶使用時很不友好。
如果我們需要改成這樣:
那我們需要給el-table和el-table-column添加相應(yīng)的props:
<el-table border>
<el-table-column prop="xxx" label="xxx" align="center" show-overflow-tooltip />
<el-table-column prop="xxx" label="xxx" align="center" show-overflow-tooltip />
<el-table-column prop="xxx" label="xxx" align="center" show-overflow-tooltip />
<!-- ... -->
</el-table>
這樣,每個使用el-table
和el-table-column
的地方,都需要添加相應(yīng)的props
,這不僅會增加我們的工作量,也讓代碼顯得很多余。
我們能否讓每個組件的代碼都簡化成以下這樣,并且仍然保留邊框、居中和超出文本溢出的效果呢?
<el-table>
<el-table-column prop="xxx" label="xxx" />
<el-table-column prop="xxx" label="xxx" />
<el-table-column prop="xxx" label="xxx" />
<!-- ... -->
</el-table>
我們可以在導(dǎo)入Element UI / Plus組件的入口處,修改組件內(nèi)部props
的默認(rèn)值default
的值
在Vue2中
import Vue from 'vue'
import { Table, TableColumn } from 'element-ui'
// 獲取組件的props
const TableProps = Table.props
const TableColumnProps = TableColumn.props
// 修改默認(rèn)props
// 全局el-table設(shè)置
TableProps.border.default = true // 邊框
// 全局el-table-column設(shè)置
TableColumnProps.align.default = 'center' // 居中
TableColumnProps.showOverflowTooltip.default = true // 文本溢出
Vue.use(Table)
Vue.use(TableColumn)
在Vue3中
import { createApp } from 'vue'
import App from './App.vue'
import ElementPlus from 'element-plus'
import { ElTable, ElTableColumn } from 'element-plus'
const app = createApp(App)
// 獲取組件的props
const TableProps = ElTable.props
const TableColumnProps = ElTableColumn.props
// 修改默認(rèn)props
// 全局el-table設(shè)置
TableProps.border = { type: Boolean, default: true } // 邊框線
// 全局el-table-column設(shè)置
TableColumnProps.align = { type: String, default: 'center' } // 居中
TableColumnProps.showOverflowTooltip = { type: Boolean, default: true } // 文本溢出
app.use(ElementPlus)
這樣只需要在全局設(shè)置一次props
,就可以在每個組件中生效,這樣就可以少寫很多代碼了。
同理也可以在全局設(shè)置其他組件的默認(rèn)props
。
其它拓展
如何讓表格在沒有數(shù)據(jù)的情況下,顯示 -- 呢 ?
在全局CSS中添加以下樣式即可:
.el-table tbody td .cell span:empty::after {
content: '--'!important;
}
或
.el-table tbody td .cell:empty::after {
content: '--';
}
大家可以根據(jù)自身項(xiàng)目情況進(jìn)行調(diào)整~