在使用 vxe-table 表格组件时,默认情况下,当用户点击某一行时,该行会高亮显示(即成为当前行),并且无法通过再次点击来取消高亮。这种交互适用于需要始终选中一行的场景。
但在某些业务场景下,可能需要允许用户取消选中当前高亮的行(例如,允许不选中任何行)。vxe-table 提供了灵活的配置来实现这一需求
实现方式
通过设置 current-row-config.strict 参数为 false,即可允许取消当前高亮行的选中状态。当 strict 为 true(默认值)时,表格会强制始终存在一个高亮行;设置为 false 后,用户可以通过再次点击已高亮的行来取消高亮。

代码
html
<template>
<div>
<vxe-grid v-bind="gridOptions" v-on="gridEvents"></vxe-grid>
</div>
</template>
<script setup>
import { reactive } from 'vue'
const gridOptions = reactive({
height: 300,
rowConfig: {
isCurrent: true,
isHover: true
},
currentRowConfig: {
strict: false
},
columns: [
{ type: 'seq', width: 70 },
{ field: 'name', title: 'Name' },
{ field: 'sex', title: 'Sex' },
{ field: 'age', title: 'Age' },
{ field: 'address', title: 'Address', showOverflow: true }
],
data: [
{ name: 'Test1', role: 'Develop', sex: 'Man', age: 28, content: 'test abc' },
{ name: 'Test2', role: 'Test', sex: 'Women', age: 41, content: 'Guangzhou' },
{ name: 'Test3', role: 'PM', sex: 'Man', age: 32, content: 'Shanghai' },
{ name: 'Test4', role: 'Designer', sex: 'Women', age: 24, content: 'Shanghai' }
]
})
const gridEvents = {
currentRowChange ({ row, oldValue, newValue }) {
console.log(`行选中事件 ${row.name} 旧:`, oldValue, '新:', newValue)
}
}
</script>
参数说明
- rowConfig.isCurrent:启用当前行高亮(即选中标记)。
- currentRowConfig.strict:是否强制保持一个当前行。true(默认):始终有一个高亮行,无法取消选中。false:允许通过再次点击已高亮行来取消选中,此时表格可以没有任何高亮行。
当 strict: false 时,currentRowChange 事件的 row 参数在取消选中时为 null,可根据此判断是否已无选中行。