ant design vue利用rowClassName给table添加行样式

目录

1. 需求:表格每行数据hasVerdict值不为’1’时标红显示

2. 实现方式:table属性rowClassName

html部分代码

<a-table
      ref="table"
      :row-key="record => record.contractNo"
      :columns="columns"
      :data-source="listData"
      :loading="listLoading"
      :pagination="listPagination"
      :row-class-name="isRedRow"
></a-table>

script部分代码

isRedRow (record, index) {
      if (record.hasVerdict !== '1') {
        return 'litigationInfoListredRow'
      } else {
        return ''
      }
}

style部分代码

<style lang="less" scoped>
.litigationInfoListredRow {
  color: red
}
</style>

3. 问题:样式未生效

查看源码,该类名已经添加到相应的表格行上
在这里插入图片描述

但是,实际styles并没有相应的样式
在这里插入图片描述

4. 解决方案

4.1 方案一:删除scoped

实际styles出现相应的样式
在这里插入图片描述

此方案缺点:scoped去除后,添加了全局样式类litigationInfoListredRow,易造成全局数据污染

4.2 方案二:样式穿透

style部分代码

<style lang="less" scoped>
/deep/ .litigationInfoListredRow {
  color: red
}
</style>

此时,实际styles也出现相应的样式
在这里插入图片描述

5. 总结

scoped属性的效果是给该组件根部添加一个随机的属性,如方案二图中的[data-v-9c0a933a],编译时css类也会加上该属性,使得该样式只作用于当前组件。因此,在使用scoped的前提下,类名前添加 /deep/ 相当于样式从该组件根部穿透到类litigationInfoListredRow,若不使用样式穿透,相当于litigationInfoListredRow直接修改ant design内部封装的组件样式:ant-table-row、ant-table-row-level-0, 但当前ant-table-row,ant-table-row-level-0类有scoped带来的属性值[data-v-9c0a933a],导致修改样式失败, 更加直观的测试:在table上添加类‘abc’

html代码:

<a-table
      ref="table"
      :row-key="record => record.contractNo"
      :columns="columns"
      :data-source="listData"
      :loading="listLoading"
      :pagination="listPagination"
      :row-class-name="isRedRow"
      class="abc"
></a-table>

style代码:

<style lang="less" scoped>
.abc /deep/ .litigationInfoListredRow {
  color: red
}
</style>

样式:

在这里插入图片描述

此时,abc类带有属性,可以实现样式穿透。样式穿透改变的是ant design框架封装的组件样式,/deep/前不能再是ant design封装的组件,那样无法找到,不知从何处穿透。比如style代码改成:

<style lang="less" scoped>
.ant-table-tbody /deep/ .litigationInfoListredRow {
  color: red
}
</style>

此时是无效的

要在 antd-vue 的 a-table 组件中使用上下键选择,您需要编写一些 JavaScript 代码来实现这个功能。您可以使用 `keydown` 事件来监听键盘事件,并根据按下的键来执相应的操作。以下是一个可以实现上下键选择的示例代码: ```vue <template> <a-table :columns="columns" :data-source="data" @row-click="handleRowClick" :row-class-name="rowClassName" /> </template> <script> export default { data() { return { selectedRow: null, data: [ { id: 1, name: 'John Doe' }, { id: 2, name: 'Jane Smith' }, { id: 3, name: 'Bob Johnson' }, ], columns: [ { title: 'ID', dataIndex: 'id', }, { title: 'Name', dataIndex: 'name', }, ], }; }, methods: { handleKeyDown(event) { if (event.keyCode === 38) { // up arrow key if (this.selectedRow === null) { this.selectedRow = this.data[this.data.length - 1]; } else { const index = this.data.indexOf(this.selectedRow); this.selectedRow = this.data[index === 0 ? this.data.length - 1 : index - 1]; } } else if (event.keyCode === 40) { // down arrow key if (this.selectedRow === null) { this.selectedRow = this.data[0]; } else { const index = this.data.indexOf(this.selectedRow); this.selectedRow = this.data[(index + 1) % this.data.length]; } } }, handleRowClick(row) { this.selectedRow = row; }, rowClassName(row) { return row === this.selectedRow ? 'selected-row' : ''; }, }, mounted() { window.addEventListener('keydown', this.handleKeyDown); }, beforeDestroy() { window.removeEventListener('keydown', this.handleKeyDown); }, }; </script> <style scoped> .selected-row { background-color: #e6f7ff; } </style> ``` 在这个示例中,我们使用 `selectedRow` 变量来跟踪当前选中的。当用户按下上下箭头键时,我们会根据当前选中的来更新 `selectedRow` 变量。我们还在表格的 `@row-click` 事件中处理用户单击的情况,以更新 `selectedRow` 变量。最后,我们使用 `rowClassName` 属性来为选中的添加一个特殊的 CSS 类,以便用户可以看到它被选中了。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值