antd design table更改某行数据的样式操作


Posted in Javascript onOctober 31, 2020

antd Table里面有一个rowClassName方法 表格行的类名 Function(record, index):string-->返回类型是String类型。

例子:

import styless from './component/record.css';--->引入css样式。

css:
.csbsTypes{
 font-family:微软雅黑, "Open Sans", "宋体";
 font-weight: bold;
 }

代码:

<Table
 title={()=><div style={{textAlign: 'center',backgroundColor:'#170A29'}}></div>}
 columns={R1columns}
 dataSource={this.state.RateData}
 pagination={false}
 rowClassName={(record, index) => record.csbsType ==='不限范围'?'csbsTypes':''}-->因为rowClassName方法返回的是String类型,所以直接将样式名字填进去,就会自动查找此样式
/>

显示结果就是:在csbsType ===“不限范围“”的这一行字体会被加粗```

补充知识:vue 给ant design table 组件自定义点击行(选中行)样式和斑马纹样式

写在开头:

element-ui的table组件有几个属性很好用,但是ant-design中table组件是没有的。

比如:

stripe: 是否为斑马纹 table。

highlight-current-row: 是否要高亮当前行。

当然,还有好几个其他的属性,但是本文先只讲这两个。既然element-ui有,ant-design没有,那我在用ant-design的table组件时,想要实现这两个功能怎么办?

答案是凉拌。既然它没有,那就自己写,也就是二次封装。

ok,先来实现这个属性的功能:highlight-current-row。

highlight-current-row

首先,当然是给定义prop变量:highlightCurrentRow;再定义一个另外一个prop变量currentRow。

然后在watch中监听currentRow的变化,每次当currentRow变化的时候,渲染一下上一个选中行和当前选中行的样式。

currentRow (val) {
   if (this.highlightCurrentRow) {
    this.renderRowStyleAfterRowClick(val)
   }
  }

highlightCurrentRow为true的时候,才需要渲染新的样式。

renderRowStyleAfterRowClick:

// 选中某一行后,渲染表格行的样式
  renderRowStyleAfterRowClick (currentRow) {
   const elements = document.getElementsByClassName('ant-table-row')
   const rowSelectionElement = document.getElementsByClassName('row-selection')
   // 获取上一个选中行,并移除它的选中样式
   if (rowSelectionElement.length > 0) {
    rowSelectionElement[0].classList.remove('row-selection')
   }
   // 给当前选中行添加选中行的样式
   if (elements.length > 0) {
    const rowList = [...elements]
    rowList.find(t => t.dataset.rowKey === currentRow.id).classList.add('row-selection')
   }
  }

代码其实很简单:

先拿表格当前页的所有row元素(table组件没有提供当前点击行的原生class)和当前选中row元素。

如果当前有选中的行,先移除这个之前添加过的css class 'row-selection'。

然后再给当前选中行添class 'row-selection'。

那个这里就有疑问了,我怎么样才能找到当前行呢?table组件并没有提供当前选中行的class(至少我没有找到),所有我只能t通过class name 'ant-table-row' 拿到所有row, 然后再从中找出你当前点击的那一行。

这个时候需要利用一个很关键的属性: rowKey

还记得ant-design table组件的api文件最后面的那个注意吗?

antd design table更改某行数据的样式操作

这里提醒你,rowKey用来指定数据列的住建,也就是每一行的唯一标志,那么好办了 。

我们引用table组件的时候,将rowKey设置为表格数据源的主键,这样我们就能从元素中的dataset中获取到rowKey,然后找出当前点击行。

rowList.find(t => t.dataset.rowKey === currentRow.id)

然后给这个元素动态添加class ‘'row-selection'。

// 给表格添加悬停样式和当前点击行添加选中样式
.ant-table-row {
 &:hover > td {
  background-color: @background-color !important;
  color: #fff !important;
 }
 &.row-selection {
  background-color: @background-color !important;
  color: #fff !important;
 }
}

这里设置hover时行样式和点击时行样式一样,是为了不让行点击后,该行悬停时,出现其他不一样的样式。如果不想设置成一样,可以单独设置行点击时的hover样式和行点击时的样式一样。

// 给表格添加悬停样式和当前点击行添加选中样式
.ant-table-row {
 &.row-selection {
  background-color: @background-color !important;
  color: #fff !important;
  &:hover > td {
    background-color: @background-color !important;
    color: #fff !important;
   }
 }
}

这样,我们的目的就达到了。

在行点击时,修改currentRow,table组件内部通过watch监测到currentRow的变化,就会触发改变样式的方法。

<s-table
    ref="table"
    size="default"
    rowKey="id"
    :columns="columns"
    :verticalScroll="false"
    :data="loadData"
    :stripe="true"
    :highlightCurrentRow="true"
    :currentRow="selectedCustomer"
    :customRow="rowClick">
...
rowClick: record => ({
    // 事件
    on: {
     click: () => {
      this.handleCurrentRowChanged(record)
     }
    }
   })
handleCustomerChanged (record) {
  this.selectedCustomer = record
}

这样就可以了。

stripe(斑马纹行)

实现行的stripe功能,还是比较简单的。

添加prop 变量 stripe, 在组件的update函数钩子内,调用实现斑马纹的方法就可以了

updated () {
  if (this.stripe) {
   this.renderStripe()
  }
}

实现斑马纹的方式有多种,这里只展示期中一种:

// 对表格行进行斑马行格式显示
  renderStripe () {
   const table = document.getElementsByClassName('ant-table-row')
   if (table.length > 0) {
    const rowList = [...table]
    rowList.forEach(row => {
     const index = rowList.indexOf(row)
     if (index % 2 !== 0) {
      row.style.backgroundColor = '#f7f7f7'
     } else {
      row.style.backgroundColor = '#ffffff'
     }
    })
   }
  },

获取到table的所有行,然后对其进行隔行设置不一样的行背景色,目的就达到了。

有其他更多方式的朋友欢迎补充。

以上这篇antd design table更改某行数据的样式操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
9行javascript代码获取QQ群成员具体实现
Oct 16 Javascript
JS增加行复制行删除行的实现代码
Nov 09 Javascript
innerText 使用示例
Jan 23 Javascript
jquery操作checkbox实现全选和取消全选
May 02 Javascript
js实现的标题栏新消息闪烁提示效果
Jun 06 Javascript
关于获取DIV内部内容报错的原因分析及解决办法
Jan 29 Javascript
Vue应用部署到服务器的正确方式
Jul 15 Javascript
浅谈vue中关于checkbox数据绑定v-model指令的个人理解
Nov 14 Javascript
Vue项目中使用better-scroll实现一个轮播图自动播放功能
Dec 03 Javascript
babel7.x和webpack4.x配置vue项目的方法步骤
May 12 Javascript
深入学习JavaScript 高阶函数
Jun 11 Javascript
解决Vue中使用keepAlive不缓存问题
Aug 04 Javascript
antd配置config-overrides.js文件的操作
Oct 31 #Javascript
解决ant-design-vue中menu菜单无法默认展开的问题
Oct 31 #Javascript
Ant Design的可编辑Tree的实现操作
Oct 31 #Javascript
antd多选下拉框一行展示的实现方式
Oct 31 #Javascript
解决antd 下拉框 input [defaultValue] 的值的问题
Oct 31 #Javascript
Vue使用CDN引用项目组件,减少项目体积的步骤
Oct 30 #Javascript
vue+swiper实现左右滑动的测试题功能
Oct 30 #Javascript
You might like
德劲1102收音机的打理维修案例
2021/03/02 无线电
php 提速工具eAccelerator 配置参数详解
2010/05/16 PHP
php实现memcache缓存示例讲解
2013/12/04 PHP
PHP生成图片缩略图类示例
2017/01/12 PHP
PHP实现大数(浮点数)取余的方法
2017/02/18 PHP
thinkPHP简单调用函数与类库的方法
2017/03/15 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
jquery blockUI 遮罩不能消失与不能提交的解决方法
2011/09/17 Javascript
基于jquery的禁用右键、文本选择功能、复制按键的实现代码
2013/08/27 Javascript
在Ubuntu上安装最新版本的Node.js
2014/07/14 Javascript
js判断浏览器是否支持html5
2014/08/17 Javascript
javascript检测flash插件是否被禁用的方法
2016/01/14 Javascript
Node.js项目中调用JavaScript的EJS模板库的方法
2016/03/11 Javascript
AngularJS 工作原理详解
2016/08/18 Javascript
详解vue.js移动端导航navigationbar的封装
2017/07/05 Javascript
浅谈在vue项目中如何定义全局变量和全局函数
2017/10/24 Javascript
11行JS代码制作二维码生成功能
2018/03/09 Javascript
jQuery实现图片上传预览效果功能完整实例【测试可用】
2018/05/28 jQuery
详解Vue iview IE浏览器不兼容报错(Iview Bable polyfill)
2019/01/07 Javascript
如何实现一个简易版的vuex持久化工具
2019/09/11 Javascript
关于JSON解析的实现过程解析
2019/10/08 Javascript
[03:40]DOTA2抗疫特别篇《英雄年代》
2020/02/28 DOTA
[43:43]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第一场 11.22
2020/11/24 DOTA
Python3使用requests发闪存的方法
2016/05/11 Python
Python 过滤错误log并导出的实例
2019/12/26 Python
Tensorflow之梯度裁剪的实现示例
2020/03/08 Python
Python 实现集合Set的示例
2020/12/21 Python
CSS3圆角和渐变2种常用功能详解
2016/01/06 HTML / CSS
新浪网技术部笔试题
2016/08/26 面试题
什么是Web Service?
2012/07/25 面试题
大专应届生个人的自我评价
2013/11/21 职场文书
二年级班级文化建设方案
2014/05/10 职场文书
农村党支部书记党群众路线四风问题整改措施
2014/09/26 职场文书
2015年综治维稳工作总结
2015/04/07 职场文书
2015年四年级班主任工作总结
2015/10/22 职场文书
创业计划书之DIY自助厨房
2019/09/06 职场文书