ant design of vue 表格 默认,跨页勾选,翻页选择记忆勾选,数据回显勾选

本文介绍了如何在使用Ant Design Vue的表格中实现跨页勾选功能,并确保之前选中的数据显示正确状态。重点讲解了rowKey的绑定和如何通过rowSelection组件管理选中项的逻辑,包括全选、取消选中和默认勾选的设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录

在使用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,
	            },
	          }
	        },
      },
	}
}
### 实现异步数据加载 在 `ant-design-vue` 中,可以通过配置特定属性来实现在树形结构组件中的异步数据加载。对于 `TreeSelect` 组件而言,设置 `treeDataSimpleMode` 和 `loadData` 属性能够支持按需加载子节点的数据[^3]。 下面是一个具体的实现方式: #### 使用 loadData 函数 定义一个名为 `loadData` 的函数用于发起网络请求获取子节点列表,并将其作为参数传递给 TreeSelect 组件。当用户展开某个父节点时会触发此方法执行并传入当前被点击项的信息。 ```javascript const onLoadData = (treeNode) => { return new Promise((resolve) => { if (treeNode.dataRef.children) { resolve(); return; } setTimeout(() => { // 模拟异步操作 treeNode.dataRef.children = [ { title: 'Child Node', value: 'child-1' }, { title: 'Another Child Node', value: 'child-2'} ]; resolve(); }, 1000); }); }; ``` #### 设置 treeCheckStrictly 及 labelInValue 参数 为了确保父子节点之间的关联关系以及正确处理回显逻辑,在初始化组件时还需要指定两个重要项:`treeCheckStrictly=true` 表示允许单独勾选任意级别节点而不影响其上级;而 `labelInValue={true}` 则使得 v-model 返回的对象不仅包含 selectedKeys 而且还有对应的 labels ,从而方便前端展示完整的路径信息。 ```vue <template> <a-tree-select :tree-data="treeData" @change="handleChange" placeholder="Please select" :loadData="onLoadData" treeCheckable showCheckedStrategy="SHOW_ALL" allowClear style="width: 300px;" :dropdownStyle="{ maxHeight: '400px', overflow: 'auto' }" :treeDefaultExpandAll="false" :treeCheckStrictly="true" :labelInValue="true"> </a-tree-select> </template> <script setup lang="ts"> import { ref } from "vue"; // 假设初始状态只有根节点 let treeData = ref([ { key:'root',title:"Root",value:"root"} ]); function handleChange(value){ console.log(`selected ${JSON.stringify(value)}`); } </script> ``` 上述代码片段展示了如何利用 `ant-design-vue` 提供的功能构建具有懒加载特性的树状选择器控件。通过合理运用这些特性,可以有效减少初次渲染所需时间并提升用户体验。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值