当前位置: 首页 > news >正文

element-plus弹窗内分页表格保留勾选项

element-plus弹窗内分页表格保留勾选项

情境

vue项目中使用element-plus组件,页面中某个选择项选择方式为:点击选择框打开弹窗,弹窗内部为表格,表格支持勾选,表格勾选项作为选择框的已选项。其中表格数据是接口分页获取的,表格支持搜索,该选择项组件在页面中存在复用,需要保证勾选项与已选项始终保持一致。

父组件

关键::destroy-on-close="true"关闭弹窗时需要销毁弹窗内容使弹窗内表格回到初始化状态,若不销毁则需要处理勾选项数据与表格内置勾选状态冲突的情况。最终选择牺牲很小性能以解决问题,若有不需要销毁的方式欢迎一起讨论

<!-- 涉及项目内的变量和函数与主题无关,不在此列出赘述 -->
<el-dialogv-model="memberDialog.visible"title="请选择"width="1000":before-close="() => {memberDialog.visible = false}":destroy-on-close="true"
><member-select class="member-content" @success="saveMember" :value="memberDialog.value" />
</el-dialog>

子组件

模板定义

reserve-selectionrow-key配合使用使表格数据刷新后依旧保留选项

<el-tableref="multipleTableRef":data="tableData"row-key="memberId"style="width: 100%; height: 100%;"@selection-change="handleSelectionChange"
><el-table-column type="selection" :reserve-selection="true"/><el-table-column property="member" label="人员名称"/><el-table-column property="phoneNumber" label="手机号码"/><el-table-column property="positionName" label="人员职位"/>
</el-table>

关键函数定义

const tableData = ref([])
const selectItems = ref([]) // 存储表格勾选项
const multipleTableRef = ref(null as any)
const isAutoCheck = ref(true) // 判断是toggleRowSelection还是表格内置自动更新勾选状态
const props = defineProps<{value: Array<any>
}>();// 针对表格数据变化根据勾选项进行手动修改行的勾选状态
const toggleSelect = () => {tableData.value.forEach((item: any) => {let selected = selectItems.value.some(selectItem => selectItem.memberId === item.memberId);let isChecked = multipleTableRef.value.getSelectionRows().some(row => row.memberId === item.memberId);// 对于勾选项已勾选但行勾选状态为未勾选的进行手动勾选if(selected && !isChecked) {isAutoCheck.value = falsemultipleTableRef.value.toggleRowSelection(item, selected)}})
}// 根据传入值设置表格勾选项
watch(() => props.value,(newVal, oldVal) => {selectItems.value = newVal}, {immediate: true}
)// toggleRowSelection会触发selection-change,此时不更新勾选项,否则将造成勾选项重复
const handleSelectionChange = (selections: Array<any>) => {if(isAutoCheck.value) selectItems.value = selectionselse isAutoCheck.value = true
}// 获取数据更新表格时toggleSelect根据存储的勾选项更新表格行勾选状态
const getTable = async () => {const res:any = await getMember({name: filters.name,phoneNumber: filters.phoneNumber,saleAreaCodePath: filters.saleAreaCodePath,positionName: filters.positionName,pageindex: pagination.index,pagesize: 20})if(res.code === 200) {const data = res.data.datatableData.value = data.listpagination.total = Number(data.total)toggleSelect()}
}
getTable()

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • k8s中的存储
  • Vim使用技巧——第一章 Vim解决问题的方式
  • 力扣 11.盛最多水的容器
  • jpa适配mysql切换达梦可能的坑
  • IBM 撤出背后:国内技术人如何突围?
  • 第157天: 安全开发-Python 自动化挖掘项目SRC 目标FOFA 资产Web 爬虫解析库
  • 系统架构设计师 云原生架构篇
  • java框架
  • 关于若尔当矩阵中过渡矩阵的求法
  • 记录一下gitlab社区版的安装教程
  • 几种手段mfc140u.dll丢失的解决方法,了解mfc140u.dll
  • 我的AI工具箱Tauri版-FunAsr音频转文本
  • 什么是SERP?有什么用?
  • 视频服务器:GB28181网络视频协议
  • 【人工智能】Transformers之Pipeline(十八):文本生成(text-generation)
  • [译] 怎样写一个基础的编译器
  • 【附node操作实例】redis简明入门系列—字符串类型
  • Asm.js的简单介绍
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • co.js - 让异步代码同步化
  • django开发-定时任务的使用
  • docker容器内的网络抓包
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • JavaScript 一些 DOM 的知识点
  • JavaScript对象详解
  • java概述
  • LintCode 31. partitionArray 数组划分
  • vue-router 实现分析
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 好的网址,关于.net 4.0 ,vs 2010
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 微信小程序:实现悬浮返回和分享按钮
  • 赢得Docker挑战最佳实践
  • 智能网联汽车信息安全
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ‌分布式计算技术与复杂算法优化:‌现代数据处理的基石
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #13 yum、编译安装与sed命令的使用
  • #NOIP 2014#Day.2 T3 解方程
  • $LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (定时器/计数器)中断系统(详解与使用)
  • (二)linux使用docker容器运行mysql
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (十七)Flink 容错机制
  • (游戏设计草稿) 《外卖员模拟器》 (3D 科幻 角色扮演 开放世界 AI VR)
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)linux下的时间函数使用
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (转)项目管理杂谈-我所期望的新人
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .Net Core缓存组件(MemoryCache)源码解析
  • .net 提取注释生成API文档 帮助文档