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 相关文章推荐
IE DOM实现存在的部分问题及解决方法
Jul 25 Javascript
js实现拖拽 闭包函数详细介绍
Nov 25 Javascript
javascript简单性能问题及学习笔记
Feb 04 Javascript
理解Javascript文件动态加载
Jan 29 Javascript
简单的jQuery banner图片轮播实例代码
Mar 04 Javascript
vue.js的手脚架vue-cli项目搭建的步骤
Aug 30 Javascript
前端常见跨域解决方案(全)
Sep 19 Javascript
微信小程序实现MUI数字输入框效果
Jan 31 Javascript
详解webpack loader和plugin编写
Oct 12 Javascript
JS实现点击li标签弹出对应的索引功能【案例】
Feb 18 Javascript
JavaScript闭包原理与用法学习笔记
May 29 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
在IIS上安装PHP4.0正式版
2006/10/09 PHP
PHP 观察者模式深入理解与应用分析
2019/09/25 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
JavaScript回调(callback)函数概念自我理解及示例
2013/07/04 Javascript
js获取事件源及触发该事件的对象
2013/10/24 Javascript
jQuery动画效果animate和scrollTop结合使用实例
2014/04/02 Javascript
Bootstrap每天必学之缩略图与警示窗
2015/11/29 Javascript
浅析JavaScript中浏览器的兼容问题
2016/04/19 Javascript
js仿淘宝和百度文库的评分功能
2016/05/15 Javascript
node.js报错:Cannot find module 'ejs'的解决办法
2016/12/14 Javascript
javascript中replace使用方法总结
2017/03/01 Javascript
微信小程序商品到详情的实现
2017/06/27 Javascript
用Vue-cli搭建的项目中引入css报错的原因分析
2017/07/20 Javascript
微信小程序Echarts覆盖正常组件问题解决
2019/07/13 Javascript
vue 实现强制类型转换 数字类型转为字符串
2019/11/07 Javascript
vue中使用腾讯云Im的示例
2020/10/23 Javascript
利用Python学习RabbitMQ消息队列
2015/11/30 Python
简介Python的collections模块中defaultdict类型的用法
2016/07/07 Python
wxpython实现图书管理系统
2018/03/12 Python
Python json模块dumps、loads操作示例
2018/09/06 Python
APIStar:一个专为Python3设计的API框架
2018/09/26 Python
使用Python 正则匹配两个特定字符之间的字符方法
2018/12/24 Python
python实现词法分析器
2019/01/31 Python
django的ORM操作 增加和查询
2019/07/26 Python
python实现通过flask和前端进行数据收发
2019/08/22 Python
Python Gluon参数和模块命名操作教程
2019/12/18 Python
Python多线程多进程实例对比解析
2020/03/12 Python
利用python下载scihub成文献为PDF操作
2020/07/09 Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
2020/08/17 Python
HTML5中form如何关闭自动完成功能的方法
2018/07/02 HTML / CSS
全球游戏Keys和卡片市场:GamesDeal
2018/03/28 全球购物
优秀村官事迹材料
2014/01/10 职场文书
住宿生擅自离校检讨书
2014/09/22 职场文书
针对吵架老公保证书
2015/05/08 职场文书
2019下半年英语教师的教学工作计划(3篇)
2019/09/25 职场文书
Linux中sftp常用命令整理
2022/06/28 Servers