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 相关文章推荐
javascript 控制弹出窗口
Apr 10 Javascript
location.href用法总结(最主要的)
Dec 27 Javascript
js中匿名函数的创建与调用方法分析
Dec 19 Javascript
12306验证码破解思路分享
Mar 25 Javascript
easyui Droppable组件实现放置特效
Aug 19 Javascript
原生JS实现简单放大镜效果
Feb 08 Javascript
js实现3d悬浮效果
Feb 16 Javascript
Node.js使用gm拼装sprite图片
Jul 04 Javascript
JavaScript多线程运行库Nexus.js详解
Dec 22 Javascript
详解vue-meta如何让你更优雅的管理头部标签
Jan 18 Javascript
Webpack中publicPath路径问题详解
May 03 Javascript
工作中常用js功能汇总
Nov 07 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
非常有用的9个PHP代码片段
2016/04/06 PHP
JavaScript arguments 多参传值函数
2010/10/24 Javascript
Area 区域实现post提交数据的js写法
2014/04/22 Javascript
如何正确使用Nodejs 的 c++ module 链接到 OpenSSL
2014/08/03 NodeJs
JavaScript字符串对象的concat方法实例(用于连接两个或多个字符串)
2014/10/16 Javascript
js简单实现表单中点击按钮动态增加输入框数量的方法
2015/08/18 Javascript
JS文字球状放大效果代码分享
2015/08/19 Javascript
jQuery如何解决IE输入框不能输入的问题
2016/10/08 Javascript
jQuery实现字符串全部替换的方法
2016/12/12 Javascript
Bootstrap fileinput组件封装及使用详解
2017/03/10 Javascript
bootstrap daterangepicker汉化以及扩展功能
2017/06/15 Javascript
js实现网页的两个input标签内的数值加减(示例代码)
2017/08/15 Javascript
JavaScript 五大常见函数
2018/03/23 Javascript
Vue render深入开发讲解
2018/04/13 Javascript
详解vue配置后台接口方式
2019/03/29 Javascript
react-native聊天室|RN版聊天App仿微信实例|RN仿微信界面
2019/11/12 Javascript
详解Vue之计算属性
2020/06/20 Javascript
快速了解Vue父子组件传值以及父调子方法、子调父方法
2020/07/15 Javascript
[29:16]完美世界DOTA2联赛决赛日 Inki vs LBZS 第三场 11.08
2020/11/10 DOTA
跟老齐学Python之大话题小函数(2)
2014/10/10 Python
python实现挑选出来100以内的质数
2015/03/24 Python
python使用psutil模块获取系统状态
2016/08/27 Python
python 统计数组中元素出现次数并进行排序的实例
2018/07/02 Python
python重要函数eval多种用法解析
2020/01/14 Python
html+js 实现markdown编辑器效果
2019/10/23 HTML / CSS
顶级宝石首饰网络零售商:Angara
2016/10/25 全球购物
粉红色的鲸鱼:Vineyard Vines
2018/02/17 全球购物
俄罗斯玩具、儿童用品、儿童服装和鞋子网上商店:MyToys.ru
2019/10/14 全球购物
性能测试工程师的面试题
2015/02/20 面试题
毕业生个人投资创业计划书
2014/01/04 职场文书
销售人员自我评价
2014/02/01 职场文书
创建卫生先进单位实施方案
2014/03/10 职场文书
2015年教师节慰问信
2015/03/23 职场文书
毕业季聚会祝酒词!
2019/07/04 职场文书
PostgreSQL存储过程实用脚本(二):创建函数入门
2021/04/05 PostgreSQL
python解析照片拍摄时间进行图片整理
2022/07/23 Python