先上成品图

element ui表格在做单行选择时,可以直接使用table自带的属性 highlight-current-row (当前行高亮)和 row-click(点击某一行) 方法来选取一行并高亮显示,但是视觉效果并不是很好,所以决定再给表格每一行绑定一个单选框,将单选框的选择状态和表格的单选状态高亮显示进行绑定。

相关HTML如下所示,以一个简单表格为例

<template>
    <div class="listSelection-tbl">
        <el-table 
        :data="tableData"
        highlight-current-row
        :row-class-name="tableRowClassName"
        @row-click="onRowClick">
            <el-table-column width="60" align="center" label="选择">
                <template slot-scope="scope">
                    <el-radio 
                    :label="scope.$index"
                    v-model="radio"></el-radio>
                </template>
            </el-table-column>
            <el-table-column prop="date" label="日期"></el-table-column>
            <el-table-column prop="name" label="模板名称"></el-table-column>
            <el-table-column prop="address" label="地址"></el-table-column>
        </el-table>
    </div>
</template>

相关data如下所示

data() {
    return {
        // 单选框组件绑定的值,通过改变radio可以改变当前选中的单选框
        radio: '',
        ...
    }
}

相关methods

我们需要将表格某一行的index值和上边 data 中定义好的 radio 进行绑定来达到同步修改单选框的目的,但是直接通过 @row-click 点击事件是无法获取表格某一行的index值的,查阅文档后发现表格有一个属性 row-class-name ,它可以绑定一个行的 className 的回调方法,只需要放入到methods中,el-table 会自动触发,我们可以使用这个方法给每一行数据添加一个属性index,然后再将 row.index 绑定给 radio ,即可实现单选框的同步切换。

methods: {
    tableRowClassName({row, rowIndex}) {
        row.index = rowIndex
    }
    onRowClick(row) {
        this.radio = row.index
    },
}
Logo

前往低代码交流专区

更多推荐