使用elementUI中的Table实现带单选框的效果
elementui中的table组件实现单选的逻辑是通过对被选中的行进行高亮显示来实现的,无法实现带选择框的单选表格。经过一番研究,我采取以下代码实现了带单选框的table表格,思路是:通过handleSelectionChange函数监听多选框的变化,每次如果多选框有大于一条数据被选中,则处理多选框数据,使之只保留最新被选中的数据,并且重新清空多选框,赋值最新的数据相关行被选中,最终效果如下:
此时的table控件上的多选框只能进行单选了,并在控制台打印了当前选中行的日期信息。
实现代码如下:
<template>
<el-table
ref="multipleTable"
:data="tableData"
tooltip-effect="dark"
style="width: 100%"
@selection-change="handleSelectionChange">
<el-table-column
type="selection"
width="55">
</el-table-column>
<el-table-column
label="日期"
width="120">
<template slot-scope="scope">{{ scope.row.date }}</template>
</el-table-column>
<el-table-column
prop="name"
label="姓名"
width="120">
</el-table-column>
<el-table-column
prop="address"
label="地址"
show-overflow-tooltip>
</el-table-column>
</el-table>
</template>
<script>
export default {
data() {
return {
tableData: [{
date: '2016-05-03',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-01',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-08',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-06',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-07',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}],
multipleSelection: []
}
},
methods: {
toggleSelection(rows) {
if (rows) {
rows.forEach(row => {
this.$refs.multipleTable.toggleRowSelection(row);
});
} else {
this.$refs.multipleTable.clearSelection();
}
},
handleSelectionChange(val) {
//处理清空后的回调
if(val.length <= 0){
return ;
}else if(val.length == 1){
console.log('当前选中的数据:');
console.log(val[0].date);
return;
}else{
// console.log('处理之前');
// console.log(val);
let obj = val[val.length-1];//取最后被选中的行
val = [];
val[0] = obj;
this.multipleSelection = val;
// console.log('处理之后');
// console.log(val);
//先清空
this.$refs.multipleTable.clearSelection();
//再赋值
this.$refs.multipleTable.toggleRowSelection(val[0]);
}
},
}
}
</script>