刚开始是勾选框那一列直接空了什么都不显示,搜索了一下说是给el-table标签增加id,加了之后是显示了,但是点击任何选框都会直接取消全部选中效果,翻了半天源码也没发现到底是哪里事件冲突了还是怎么回事,烦了,干脆自己写勾选框了。首先把type=selection的列修改一下:
<!-- 原来: -->
<el-table-column
type="selection"
width="55"
align="center"
/>
<!-- 现在: -->
<el-table-column
width="55"
align="center"
>
<template
slot-scope="{row}"
slot="header"
>
<el-checkbox
:indeterminate="isIndeterminate"
v-model="checkAll"
@change="handleCheckAllChange">
</el-checkbox>
</template>
<template slot-scope="scope">
<el-checkbox v-model="scope.row.checked" @change="handleCheckedChange"/>
</template>
</el-table-column>
获取数据的时候记得加上checked用于绑定是否选中:
var ids = '' //已被选中保存过的id们 另外一个接口获取 我就不写了
//列表数据 接口获取过了
this.listData.forEach((element, index) => {
//在已保存列表里 选中
if (ids.indexOf(element.id) != -1) {
this.$set(this.listData[index], 'checked', true)
} else {
this.$set(this.listData[index], 'checked', false)
}
})
勾选事件:
//单个checkbox选中/不选事件
handleCheckedChange (value) {
let checkedCount = value.length;
//判断是否变成了全选/全不选 置状态
this.checkAll = checkedCount === this.listData.length;
this.isIndeterminate = checkedCount > 0 && checkedCount < this.listData.length;
},
//全选/全不选切换
handleCheckAllChange (val) {
//改变每一条的选中状态
this.listData.forEach((element, index) => {
this.$set(this.listData[index], 'checked', val)
})
//全选框的状态 单纯显示
this.isIndeterminate = false;
},