ant design of vue 表格 默认,跨页勾选,翻页选择记忆勾选,数据回显勾选---react的antd也行,思路一致
需求
在使用ant design of vue 的table表格时需要让之前已选择的数据显示勾选状态,还要支持跨页勾选
傻逼的方法
思路
需要指定row-key绑定的值必须唯一
ant-design-vue的表格对于跨页勾选支持的非常友好,只要设置绑定一下rowKey就可以了,我这里绑定的是workerId
代码
<!-- 表格 -->
<a-table
class="FormData"
:columns="columns"
:data-source="data"
:pagination="ipageination"
:rowSelection="rowSelection"
rowKey="workerId"
bordered :scroll="{ y: 350 }"
@change="handleTablePages"
@showSizeChange="handleTableSizeChange"
>
<template slot="operation" slot-scope="text, record">
<a-space>
<!-- <a-button @click="edit(record)">编辑</a-button> -->
<a-button @click="edit(record)">编辑</a-button>
<a-button @click="delPersonnel(record)">删除</a-button>
</a-space>
</template>
</a-table>
onSelect是点击勾选事件,selectedRowKeys是勾选的rowKey值的数组
在点击勾选事件里,判断是否勾选(selected)然后去操作rowSelection.selectedRowKeys,
这个数组是用来指定选中项的 key 数组
getCheckboxProps 是选择框的默认属性配置,这个函数可获得已选择的workerId的数组,让其数据勾选回显
data() {
return{
workerIdList: [],
rowSelection: {
type: "checkbox",
// 不使用箭头函数就无法获取this
//单选
onSelect: (record, selected, selectedRows, nativeEvent) => {
// console.log(record, selected, selectedRows, nativeEvent)
const list = this.workerIdList
const selectedRowKeys = this.rowSelection.selectedRowKeys
console.log(list,selectedRowKeys);
if(!selected){
// 这里是取消勾选,删除对应的数组项
selectedRowKeys.map((x,item) => {
if(x === record.workerId){
selectedRowKeys.splice(item,1)
}
})
list.map((x,item) => {
if(x === record.workerId){
list.splice(item,1)
}
})
console.log(this.rowSelection.selectedRowKeys)
}
if(selected) {
// 这里是点击勾选,添加workerId字段到selectedRowKeys数组里
this.rowSelection.selectedRowKeys.push(record.workerId)
console.log(this.rowSelection.selectedRowKeys)
}
},
//全选
onSelectAll: (selected, selectedRows, changeRows) => {
console.log(selected, selectedRows, changeRows)
if(selected) {
changeRows.map((x)=>{
this.rowSelection.selectedRowKeys.push(x.workerId)
})
}
if(!selected) {
const list = this.workerIdList
changeRows.map((item,k)=>{
list.map((x,i)=>{
if(x.workerId == item.workerId) {
list.splice(i,1)
}
})
})
this.workerIdList = list
this.rowSelection.selectedRowKeys = []
}
},
selectedRowKeys: [],
getCheckboxProps:(record) => {
if(record.picked !== 0){
this.electedRowKeys.push(record.workerId)
this.workerIdList.push(record.workerId)
this.rowSelection.selectedRowKeys = this.workerIdList
}
return{
props:{
defaultChecked:record.picked !== 0,
},
}
},
},
}
}
聪明的方法:
<a-table
:data-source="formModel.goodsInfoList"
:columns="columns"
:row-selection="rowSelection"
:pagination="false"
row-key="goodsCode"
/>
// 跨页多选开始
const RowKeys = ref([])
const rowSelection = {
preserveSelectedRowKeys: true, // 2.加这一行
selectedRowKeys: RowKeys,
onChange: (selectedRowKeys, selectedRows) => {
console.log('selectedRowKeys: ', selectedRowKeys)
console.log('selectedRows: ', selectedRows)
RowKeys.value = selectedRowKeys
console.log('产品id数组', RowKeys.value)
},
getCheckboxProps: (record) => ({
// Column configuration not to be checked
name: record.name,
}),
}
// 跨页多选结束