element-ui自定义table表头,修改列标题样式
elementUI table表格一般的样式是这样的:

但是要改变表头是比较麻烦的一个事情,但是往往有些项目是需要的比如改成如下样式:

一般直接改起来挺麻烦,好在官网提供了一个方法:render-header
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|---|---|---|---|---|
| render-header | 列标题 Label 区域渲染使用的 Function | Function(h, { column, $index }) | — | — |
根据官方的方法来实现有两个方法:
方法一:vue的render函数来直接实现
<template>
<div>
<h2 align="center">自定义表头样式</h2>
<el-table :data="tableData" border stripe>
<el-table-column prop="name" label="姓名" align="center" :render-header="renderHeader">
</el-table-column>
<el-table-column prop="date" label="日期" align="center">
</el-table-column>
<el-table-column prop="address" label="地址" align="center">
</el-table-column>
</el-table>
</div>
</template> <script>
export default {
data() {
return {
tableData: [{
name: '王小虎',
date: '2016-05-02',
address: '上海市普陀区金沙江路 1518 弄'
}, {
name: '王老五',
date: '2016-05-04',
address: '上海市普陀区金沙江路 1517 弄'
}],
tableHeader: [{
prop: 'name',
label: '姓名'
}, {
prop: 'date',
label: '时间'
}, {
prop: 'address',
label: '地址'
}],
}
},
methods: {
renderHeader(h, {column, $index}) {
// 这里在最外层插入一个div标签
return h('div',[// h即为cerateElement的简写
// 在div里面插入span
h('span', {
// 表示内容
domProps:{
innerHTML:column.label
},
on: {
click: () => {
console.log(`${column.label} ${$index}`)
}
}
}),
h('el-tooltip',{
// 表示属性
attrs: {
effect: "dark",
content: "备注信息",
placement: "top"
},
},[
h("i", {
'class': 'el-icon-warning table-msg'
})
])
])
},
}
}
</script>
运行效果:

对上面方法还有需要改进的地方,有时候在自定义的时候内容过于复杂,这个时候可以把内容都放到组件里面,在引进来插入进去。例如:
<!-- 使用PromptMessage.vue的组件 自定义表头 -->
<template>
<el-tooltip effect="dark" placement="top">
<div slot="content">
<span v-for="item in messages" :key="item">
{{item}}
</span>
</div>
<i class="el-icon-question" style="color:#409eff;font-size:15px;"></i>
</el-tooltip>
</template>
<script>
export default {
name:'promptMessage',
props:['messages']
};
</script>
<style scope> </style>
<!-- 新建名为 PromptMessage.vue 的组件 -->
<template>
<div>
<h2 align="center">自定义表头样式</h2>
<el-table :data="tableData" border stripe>
<el-table-column prop="name" label="姓名" align="center" :render-header="renderHeader">
</el-table-column>
<el-table-column prop="date" label="日期" align="center" :render-header="renderHeaderTwo">
</el-table-column>
<el-table-column prop="address" label="地址" align="center">
</el-table-column>
</el-table>
</div>
</template> <script>
/*
局部引入组件,也可以全局引入,在main.js import promptmessage from '路径/PromptMessage.vue'
Vue.component('promptmessage', promptmessage)
*/
import promptmessage from './PromptMessage.vue'
export default {
data() {
return {
tableData: [{
name: '王小虎',
date: '2016-05-02',
address: '上海市普陀区金沙江路 1518 弄'
}, {
name: '王老五',
date: '2016-05-04',
address: '上海市普陀区金沙江路 1517 弄'
}],
tableHeader: [{
prop: 'name',
label: '姓名'
}, {
prop: 'date',
label: '时间'
}, {
prop: 'address',
label: '地址'
}],
}
},
methods: {
renderHeader(h, {column, $index}) {
// 这里在最外层插入一个div标签
return h('div',[// h即为cerateElement的简写
// 在div里面插入span
h('span', {
// 表示内容
domProps:{
innerHTML:column.label
},
on: {
click: () => {
console.log(`${column.label} ${$index}`)
}
}
}),
h('el-tooltip',{
// 表示属性
attrs: {
effect: "dark",
content: "备注信息",
placement: "top"
},
},[
h("i", {
'class': 'el-icon-warning table-msg'
})
])
])
},
renderHeaderTwo(h, {column, $index}) {
return h('div', [
h('span', {
domProps:{
innerHTML:column.label
}
}),
h(promptmessage, {
props: {messages: ["备注信息2"]},
style: {
'cursor': 'pointer',
}
})
])
},
}
}
</script>
效果图:注意promptmessage已经是自定义组件(标签),所以不需要加引号。

方法二:直接使用JSX语法,此方法最简单,但是必须安装编译插件

详细细心去官网看吧。
1. 先安装JSX语法编译工具:
npm install\
babel-plugin-syntax-jsx\
babel-plugin-transform-vue-jsx\
babel-helper-vue-jsx-merge-props\
babel-preset-es2015\
--save-dev
2. 配置.babelrc文件:
{
"presets": ["es2015"],
"plugins": ["transform-vue-jsx"]
}
3. 编写代码:
<template>
<div>
<h2 align="center">自定义表头样式</h2>
<el-table :data="tableData" border stripe>
<el-table-column prop="name" label="姓名" align="center" :render-header="renderHeader">
</el-table-column>
<el-table-column prop="date" label="日期" align="center">
</el-table-column>
<el-table-column prop="address" label="地址" align="center">
</el-table-column>
</el-table>
</div>
</template> <script>
export default {
data() {
return {
tableData: [{
name: '王小虎',
date: '2016-05-02',
address: '上海市普陀区金沙江路 1518 弄'
}, {
name: '王老五',
date: '2016-05-04',
address: '上海市普陀区金沙江路 1517 弄'
}],
tableHeader: [{
prop: 'name',
label: '姓名'
}, {
prop: 'date',
label: '时间'
}, {
prop: 'address',
label: '地址'
}],
mesHtml:'只是一个提示'
}
},
methods: {
renderHeader(h, {column, $index}) {
return(
<div>
<span>{column.label}</span>
<el-tooltip class="tooltip" effect="dark" placement="top">
<div slot="content">
<span onClick={this.handleClick}>{this.mesHtml}</span>
</div>
<i class="el-icon-question"></i>
</el-tooltip>
</div>
)
},
handleClick(){
alert('点击')
}
}
}
</script>
运行效果如下,具体jsx语法就不做多介绍了。

element-ui自定义table表头,修改列标题样式的更多相关文章
- element-ui自定义table表头,修改标题样式、添加tooltip及 :render-header使用简介
修改列标题样式1.在列标题后面加一个图标. 以element-ui官方文档一个table表格为例,我们在地址的后面加一个定位标志的图标,代码如下: <template> <el-ta ...
- (Element UI 组件 Table)去除单元格底部的横线
Element UI 组件 Table 有一个属性 border,添加它可以增加纵向边框,但是无法控制横线边框,因此即使是最简单的 el-table,也会包含一个底部横线. 这个底部横线其实是一个 b ...
- DataTable 删除列 调整列顺序 修改列标题名称
DataTable dt = new DataTable(); //删除列 dt.Columns.Remove("Sex"); dt.Columns.Remove("Ag ...
- element ui设置表格表头高度和每一行的高度
填坑记录:今天用element ui的表格组件做用户信息展示,直接拉取的官网的代码过来,发现表头和每一行都太高了,如下: 因为第一次使用element ui的表格组件,不太清楚会遇到这样的坑,以为能轻 ...
- Joomla - 自定义(自定义模块、修改原有模块样式、添加全局JS)
一.自定义模块 自定义模块 参考 Joomla - 模块系统(新建模块.模块类别.自定义模块)第三点 自定义模块部分 自定义模块布局 参考 Joomla - T3模板(非常好用的4屏响应式模板) 的第 ...
- 怎么样使element ui 的table某列变色
第一步.在el-table里面加上:row-style="rowClass" <el-table :data="targetCarList" border ...
- element ui的table的头部自定义
<el-table-column label="级别" min-width="120" prop="clueLevel" align= ...
- Element UI的Table用法
Table 表格 用于展示多条结构类似的数据,可对数据进行排序.筛选.对比或其他自定义操作. ¶基础表格 基 2016-05-02 王小虎 上海市普陀区金沙江路 1518 弄 2016-05-04 王 ...
- element-ui自定义table表头
场景描述: 这个需求的场景很简单,表头自定义居中显示 <el-table-column show-overflow-tooltip prop="telephone" labe ...
随机推荐
- [转]SURF算法解析
SURF算法解析 一.积分图像 积分图像的概念是由Viola和Jones提出的.积分图像中任意一点(i,j)的值为原图像左上角到任意点(i,j)相应的对焦区域的灰度值的总和,其数学公式如图1所示 ...
- todo reading
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Function/bind https ...
- SqlServer动态变换库名
declare @tname varchar(20),@num intset @tname='Players_Log_L10001'declare @sql Nvarchar(1000)=N'sele ...
- 根据业务自己设计的.NET工厂模式架构
最近项目的架构需要做调整优化,根据业务需要写了一个简单的工厂模式架构 项目介绍:整个系统分为三大平台(这里用A,B,C来标示),每个平台又细分为多个APP客户端(每个APP都有appid来区分) 因为 ...
- vue开发基本步骤
1 安装node.js 安装node.js之前,先进行nvm的安装: https://github.com/coreybutler/nvm-windows/releases最好选择稳定版本 ...
- HDU2149 - Public Sale【巴什博弈】
虽然不想,但是现实总归是现实,Lele始终没有逃过退学的命运,因为他没有拿到奖学金.现在等待他的,就是像FarmJohn一样的农田生涯. 要种田得有田才行,Lele听说街上正在举行一场别开生面的拍卖 ...
- 训练1-S
给出N个正整数,检测每个数是否为质数.如果是,输出"Yes",否则输出"No". Input 第1行:一个数N,表示正整数的数量.(1 <= N < ...
- sudo详细介绍
目录参数所在/etc/sudoers 1.Host_Alias定义主机别名 例:Host_Alias FILESERVERS = fs1,fs2 #注意“=”号两边要有空格隔开 ***由于现今li ...
- Python编程:从入门到实践 - matplotlib篇 - plot & scatter
matplotlib篇 plot & scatter # filename.py 获取当前文件名方法 import sys # 当前文件名 print(sys.argv[0]) # 去除后缀后 ...
- BeanPostProcessor bean 的后置处理器
一. 自定 bean 的后置处理器 MyBeanPostProcessor 类.当你在初始化容器中的 bean 之前和之后,都会调用该处理器中的方法 @Component //将该后后置处理器加入到容 ...