Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用


Posted in Javascript onApril 11, 2019

render-header

render-header在官方文档中的介绍是这样的:

参数 说明 类型 可选值 默认值
render-header 列标题 Label 区域渲染使用的 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: '上海市普陀区金沙江路 1518 弄',
  }, {
   date: '2016-05-04',
   name: '王小虎',
   address: '上海市普陀区金沙江路 1518 弄'
  }, {
   date: '2016-05-01',
   name: '王小虎',
   address: '上海市普陀区金沙江路 1518 弄',
  }, {
   date: '2016-05-03',
   name: '王小虎',
   address: '上海市普陀区金沙江路 1518 弄'
  }]
  }
 }
 }
</script>

效果如下:

Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用

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);
}
...

效果如下:

Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用

3.在表头添加一个Tooltip

我们经常会遇到一些奇怪的需求,但是即使再奇怪我们也不能认输,现在有一个需求,要在列表表题后面添加一个提示,我们开始尝试着做:

还是以上面的代码为例,刚开始我想直接用‘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: '这是一个提示'
  })
 ]
 );
}
...

运行后发现,基本样式出来了,但是提示没有

Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用

根据element-ui 关于tooltip的文档,我发现不管是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: ["这是住址信息"]}
  })
 ]
 );
}
...

这次我们发现,果然造的轮子还是挺不错的

Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用

JSX语法

或许你会发现,这个原生的createElement 写起来并不简单,而且很费事,我们也可以采用JSX的方式,这个在Vue官方文档中有提到

Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用

查看文档,可以找到安装使用的方法

Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用

安装完成后想要再实现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去调取后台接口,更改表格数据。

然而,el-table的selection列有个大bug。

首先,获取后的数据对于el-table的selection列来说,没有字段props可以去接收,这就导致没有数据是选中的,会直接触发@select-change方法,回调参数val为[]。

其次,selection需要使用toggleSelection方法去更改,当更改时,又一次触发@select-change方法,这显然不符合需求。

因此,需要自定义table的表头信息,设置为el-checkbox。

代码如下

// 自定义表头select
 renderHeader(h, {column, $index}) {
  return h("span", {}, [
  h('el-checkbox',{
   props: {
   checked: this.allchecked 
   },
   on:{
   change: this.updateAllSelected // 选中事件 
   }
  })]);
 },

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript实例教程(19) 使用HoTMetal(7)
Dec 23 Javascript
js调用flash的效果代码
Apr 26 Javascript
js实现在文本框光标处添加字符的方法介绍
Nov 24 Javascript
Javascript中3个需要注意的运算符
Apr 02 Javascript
jquery实现图片上传之前预览的方法
Jul 11 Javascript
如何实现移动端浏览器不显示 pc 端的广告
Oct 15 Javascript
对象题目的一个坑 理解Javascript对象
Dec 22 Javascript
js实现楼层效果的简单实例
Jul 15 Javascript
vue插件tab选项卡使用小结
Oct 27 Javascript
js 原型对象和原型链理解
Feb 09 Javascript
如何抽象一个Vue公共组件
Oct 17 Javascript
vue 组件间的通信之子组件向父组件传值的方式
Jul 29 Javascript
如何检查一个对象是否为空
Apr 11 #Javascript
vue项目创建并引入饿了么elementUI组件的步骤
Apr 11 #Javascript
重学JS 系列:聊聊继承(推荐)
Apr 11 #Javascript
优雅的将ElementUI表格变身成树形表格的方法步骤
Apr 11 #Javascript
详解用场景去理解函数柯里化(入门篇)
Apr 11 #Javascript
Vue开发Html5微信公众号的步骤
Apr 11 #Javascript
跟混乱的页面弹窗说再见
Apr 11 #Javascript
You might like
上海地方志办公室-上海电子仪表工业志
2021/03/04 无线电
CI框架验证码CAPTCHA辅助函数用法实例
2014/11/05 PHP
基于php编程规范(详解)
2017/08/17 PHP
php使用curl模拟多线程实现批处理功能示例
2019/07/25 PHP
浅谈php常用的7大框架的优缺点
2020/07/20 PHP
Aster vs Newbee BO5 第一场2.19
2021/03/10 DOTA
Javascript MVC框架Backbone.js详解
2014/09/18 Javascript
js 左右悬浮对联广告特效代码
2014/12/12 Javascript
JavaScript实现的背景自动变色代码
2015/10/17 Javascript
Angular实现form自动布局
2016/01/28 Javascript
jQuery基于json与cookie实现购物车的方法
2016/04/15 Javascript
ajax级联菜单实现方法实例分析
2016/11/28 Javascript
Bootstrap源码解读导航(6)
2016/12/23 Javascript
工厂模式在JS中的实践
2017/01/18 Javascript
JavaScript引用类型RegExp基本用法详解
2018/08/09 Javascript
JS实现数组去重及数组内对象去重功能示例
2019/02/02 Javascript
ES6 Generator函数的应用实例分析
2019/06/26 Javascript
在Python中使用成员运算符的示例
2015/05/13 Python
Python实现的文本简单可逆加密算法示例
2017/05/18 Python
基于Python3 逗号代码 和 字符图网格(详谈)
2017/06/22 Python
python判断输入日期为第几天的实例
2018/11/13 Python
Python读取指定日期邮件的实例
2019/02/01 Python
简单了解Pandas缺失值处理方法
2019/11/16 Python
美国成衣女装品牌:CHICO’S
2016/09/19 全球购物
顶岗实习接收函
2014/01/09 职场文书
党的群众路线教育实践活动公开承诺书
2014/03/28 职场文书
竞选副班长演讲稿
2014/04/24 职场文书
绿色环保家庭事迹材料
2014/08/31 职场文书
光学与应用专业毕业生求职信
2014/09/01 职场文书
岳庙导游词
2015/02/04 职场文书
2015学校师德师风工作总结
2015/04/22 职场文书
保护环境的宣传语
2015/07/13 职场文书
如何使JavaScript休眠或等待
2021/04/27 Javascript
Ajax 的初步实现(使用vscode+node.js+express框架)
2021/06/18 Javascript
Python使用socket去实现TCP客户端和TCP服务端
2022/04/12 Python
Python如何将list中的string转换为int
2022/07/15 Ruby