最终效果, 保留复选框的同时 去掉 全选复选框
需求: 只做单选操作, 且选中数据需要使用整个 Object 对象数据。考虑过checked模拟, 但是感觉太麻烦 ( 懒 )。
选择使用table的原因, 即便是绑定整个对象 只要指定row-key即可保证回填
下面是实现代码
<template>
<el-table
ref="multipleTable"
:data="tableData"
tooltip-effect="dark"
:header-cell-class-name="headerCell"
style="width: 100%">
<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>
<div style="margin-top: 20px">
<el-button @click="toggleSelection([tableData[1], tableData[2]])">切换第二、第三行的选中状态</el-button>
<el-button @click="toggleSelection()">取消选择</el-button>
</div>
</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: {
/**
* 通过el-table的 header-cell-class-name 回调
*/
headerCell(row){
const isDelCheckedAll = true; // 可以设置 props 传递变量
if (isShowSelectAll && (row.columnIndex === 0 && row.rowIndex === 0)) {
this.removeCheckedAllDom(row);
}
},
removeCheckedAllDom(row){
this.$nextTick(() => {
// 每次触发 headerCell 判断如果是第一个 单元格 调用该方法
// row.column.id 是该单元格的 class 样式
// 通过 class 样式连续找两层 children 节点 如果存在 执行 remove()
var selectBox = document.querySelector(`.${row.column.id}`);
selectBox.children[0].children[0]?.remove();
})
}
}
</script>