Element-ui自定義table表頭、修改列標題樣式、添加tooltip、:render-header使用
render-header
render-header在官方文檔中的介紹是這樣的:
| 參數(shù) | 說明 | 類型 | 可選值 | 默認值 |
|---|---|---|---|---|
| render-header | 列標題 Label 區(qū)域渲染使用的 Function | Function(h, { column, $index }) | — | — |
修改列標題樣式
1.在列標題后面加一個圖標。
以element-ui官方文檔一個table表格為例,我們在地址的后面加一個定位標志的圖標,代碼如下:
<template>
<el-table
:data="tableData2"
style="width: 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="地址" :render-header="renderHeader"> // 加入render事件
</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 '';
},
// render 事件
renderHeader (h,{column}) { // h即為cerateElement的簡寫,具體可看vue官方文檔
return h(
'div',
[
h('span', column.label),
h('i', {
class:'el-icon-location',
style:'color:#409eff;margin-left:5px;'
})
],
);
}
},
data() {
return {
tableData2: [{
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀區(qū)金沙江路 1518 弄',
}, {
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀區(qū)金沙江路 1518 弄'
}, {
date: '2016-05-01',
name: '王小虎',
address: '上海市普陀區(qū)金沙江路 1518 弄',
}, {
date: '2016-05-03',
name: '王小虎',
address: '上海市普陀區(qū)金沙江路 1518 弄'
}]
}
}
}
</script>
效果如下:

2.在列標題后面添加一個單選框
還是以上面的代碼為例,只寫關鍵代碼:
...
// render 事件
renderHeader (h,{column}) { // h即為cerateElement的簡寫,具體可看vue官方文檔
return h(
'div',
[
h('span', column.label),
h('el-checkbox',{
style:'margin-left:5px',
on:{
change:this.select // 選中事件
}
})
],
);
},
// 添加選中事件
select (data) {
console.log(data);
}
...
效果如下:

3.在表頭添加一個Tooltip
我們經(jīng)常會遇到一些奇怪的需求,但是即使再奇怪我們也不能認輸,現(xiàn)在有一個需求,要在列表表題后面添加一個提示,我們開始嘗試著做:
還是以上面的代碼為例,剛開始我想直接用‘el-tooltip',應該不是很難,然后就是這樣:
...
renderHeader (h,{column}) {
return h(
'div',
[
h('span', column.label),
h('el-tooltip',[
h('i', {
class:'el-icon-question',
style:'color:#409eff;margin-left:5px;'
})
],{
content: '這是一個提示'
})
]
);
}
...
運行后發(fā)現(xiàn),基本樣式出來了,但是提示沒有

根據(jù)element-ui 關于tooltip的文檔,我發(fā)現(xiàn)不管是effect, content還是placement對tooltip都不管用,既然硬上不管用,就曲線救國,通過組件的方法,先造個輪子再走路
// 寫一個PromptMessage的組件,并全局注冊
<template>
<div class="tooltip">
<el-tooltip effect="dark" placement="right">
<div slot="content"> // 插槽,可提供多行的提示信息
<p v-for="item in messages" :key="item">
{{item}}
</p>
</div>
<i class="el-icon-question" style="color:#409eff;margin-left:5px;font-size:15px;"></i>
</el-tooltip>
</div>
</template>
<script>
export default {
props:['messages']
};
</script>
然后在render-header事件中使用組件
...
renderTip (h,{column}) {
return h(
'div',{
style:'display:flex;margin:auto;'
},
[
h('span', column.label),
h('prompt-message', {
props: {messages: ["這是住址信息"]}
})
]
);
}
...
這次我們發(fā)現(xiàn),果然造的輪子還是挺不錯的

JSX語法
或許你會發(fā)現(xiàn),這個原生的createElement 寫起來并不簡單,而且很費事,我們也可以采用JSX的方式,這個在Vue官方文檔中有提到

查看文檔,可以找到安裝使用的方法

安裝完成后想要再實現(xiàn)tooltip就簡單了
...
renderTip (h,{column}) {
return (
<el-tooltip class="tooltip" effect="dark" placement="right">
<ul slot="content">
<li>這是第一個提示</li>
<li>這是第二個提示<li>
</ul>
<i class="el-icon-question"></i>
</el-tooltip>
);
}
...
這樣看著很好理解,寫起來也很方便
補充:
最近有個需求,需要在每次對el-table的單項進行勾選時,使用@select-change去調(diào)取后臺接口,更改表格數(shù)據(jù)。
然而,el-table的selection列有個大bug。
首先,獲取后的數(shù)據(jù)對于el-table的selection列來說,沒有字段props可以去接收,這就導致沒有數(shù)據(jù)是選中的,會直接觸發(fā)@select-change方法,回調(diào)參數(shù)val為[]。
其次,selection需要使用toggleSelection方法去更改,當更改時,又一次觸發(fā)@select-change方法,這顯然不符合需求。
因此,需要自定義table的表頭信息,設置為el-checkbox。
代碼如下
// 自定義表頭select
renderHeader(h, {column, $index}) {
return h("span", {}, [
h('el-checkbox',{
props: {
checked: this.allchecked
},
on:{
change: this.updateAllSelected // 選中事件
}
})]);
},
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
vue3中echarts的tooltip組件不顯示問題及解決
這篇文章主要介紹了vue3中echarts的tooltip組件不顯示問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10
vue3中實現(xiàn)使用element-plus調(diào)用message
這篇文章主要介紹了vue3中實現(xiàn)使用element-plus調(diào)用message,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09
使用vue根據(jù)狀態(tài)添加列表數(shù)據(jù)和刪除列表數(shù)據(jù)的實例
今天小編就為大家分享一篇使用vue根據(jù)狀態(tài)添加列表數(shù)據(jù)和刪除列表數(shù)據(jù)的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09
vue-cli 3.x 配置Axios(proxyTable)跨域代理方法
今天小編就為大家分享一篇vue-cli 3.x 配置Axios(proxyTable)跨域代理方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09

