应无所住,而生其心
排名
1
文章
860
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

element plus 表格 table分页状态或者条件类型切换下实现勾选记录

1608人阅读 2023/9/1 15:59 总访问:5182637 评论:0 收藏:0 手机
分类: 前端

实现这种切换的时候勾选的复选框状态保持,如果是分页其实实现思路也一样。


实现思路:有一个缓存,存储的是选中的行,当勾选行的时候就往缓存里边去添加,取消勾选的时候就从缓存里边移出,切换的时候用维护的缓存去勾选上即可,获取数据的时候直接返回这个维护的缓存即可,不用管他是第几页或者什么条件下的数据。

处理行的选择事件


使用select事件:当用户手动勾选数据行的 Checkbox 时触发的事件

怎么知道是勾选还是取消勾选呢?其实很简单,当前选中的这行包含在选中里边就说明当前这行是选中嘛,否者就是没有选中的状态。

  1. const selectRow = (selection: any, row: any) => {
  2. console.log(selection)
  3. console.log(row)
  4. // true就是选中,0或者false是取消选中。
  5. // 当前选中的这行包含在选中里边就说明当前这行是选中嘛,否者就是没有选中的状态
  6. let selected = selection.length && selection.indexOf(row) !== -1
  7. console.log(selected)
  8. }
根据是否选择的状态处理向缓存中添加或者移除
  1. const selectRow = (selection: any, row: any) => {
  2. // true就是选中,0或者false是取消选中。当前选中的这行包含在选中里边就说明当前这行是选中嘛,否者就是没有选中的状态
  3. let selected = selection.length && selection.indexOf(row) !== -1
  4. if (selected === true) {
  5. console.log("选中状态应该添加到记录中", row)
  6. let findrow = state.checkDataRecord.find(a => a.id === row.id)
  7. // 排除一下记录中已经有了的数据。我这里切换的时候可能会有重复的数据
  8. if (!findrow) {
  9. state.checkDataRecord.push(row)
  10. }
  11. }
  12. else {
  13. // console.log("取消选中状态应该从记录中移除", row)
  14. // 这里移除的方式使用过滤的方式。也可以找到索引后使用.splice(rowIndex, 1)移除
  15. state.checkDataRecord = state.checkDataRecord.filter((a: any) => a.id !== row.id)
  16. }
  17. // console.log("目前记录的内容", state.checkDataRecord)
  18. }

处理勾选状态

在分页或者切换数据后,勾选已经勾选上的数据,很简单用官网文档的方法toggleRowSelection去选择即可。但是注意几点:


1:调用时机,要放到先数据库回来的后面且加上nextTick,不然可能会因为时机不对,而无法勾选上已经记录的数据。

2:勾选以前选择的时候不能直接把记录的值用于去勾选是有问题的,要从现有这一页绑定的数据库中去筛选出来需要勾选的值。估计虽然数据值是一样的,但是对象不一样,也就是内存中存储的地址是不一样的。

  1. nextTick(() => {
  2. // 勾选上目前已经选择上的数据,估计要放到数据查询接口回来的时候在勾上,且要写到nextTick里边去,不然页面还没有渲染
  3. state.checkDataRecord.forEach((row: any) => {
  4. console.log("记录里边有数据自动勾上", row)
  5. // 勾选以前选择的时候不能直接把以前记录的值用于去勾选是有问题的,要从现有这一页绑定的数据库中去筛选出来需要勾选的值,
  6. // 在显示上去。或者给表格设置一下row-key,这样勾选的时候应该就不需要指定整个对象了,只需要给我们规定的key就行,这个需要自己的尝试了
  7. let findrow = state.tasksList.find((a: any) => a.id === row.id)
  8. if (findrow) {
  9. taskTableDataRef.value!.toggleRowSelection(findrow, undefined)
  10. }
  11. })
  12. })

就这样其实已经能实现在勾选后,切换回来勾选状态也是保持的,也能正确的获取到所有勾选的数据。但是还差全选与全反选的处理,顶部的全选与全反选是不会触发select事件的,我们需要单独处理一下。

单独处理一下全选与全反选的状态记录


使用select-all事件:当用户手动勾选全选 Checkbox 时触发的事件

怎么知道是全选还是全不选呢?其实非常的简单,看参数里边有没有值即可,有值就是勾选的全选,没值就是勾选的全不选。

  1. const selectAllRow = (selection: any)=>{
  2. console.log("手动点击了全选")
  3. console.log(selection)
  4. if(selection.length>0)
  5. {
  6. console.log("全选")
  7. }
  8. else
  9. {
  10. console.log("全反选")
  11. }
  12. }

加入处理代码:

  1. const selectAllRow = (selection: any) => {
  2. // console.log("手动点击了全选")
  3. // console.log(selection)
  4. if (selection.length > 0) {
  5. console.log("全选")
  6. // 往维护的数据里边去添加
  7. selection.forEach((element: any) => {
  8. let findrow = state.checkDataRecord.find(a => a.id === element.id)
  9. // 排除一下记录中已经有了的数据
  10. if (!findrow) {
  11. state.checkDataRecord.push(element)
  12. }
  13. });
  14. }
  15. else {
  16. console.log("全反选")
  17. // 从当前这一页的数据在缓存数据中去掉
  18. state.tasksList.forEach((element: any) => {
  19. let rowIndex = state.checkDataRecord.findIndex(a => a.id === element.id)
  20. // console.log("找到的位置", rowIndex)
  21. // 排除一下记录中已经有了的数据
  22. if (rowIndex > -1) {
  23. state.checkDataRecord.splice(rowIndex, 1)
  24. }
  25. });
  26. }
  27. }

欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

vue3 element plus 表单输入框放到一行

当垂直方向空间受限且表单较简单时,可以在一行内放置表单。 通过设置 inline 属性为 true 可以让表单域变为行内的表单域...

element plus 下拉列表select的使用。下拉列表无法选择值

下拉列表无法选择值要给一个v-model: 而且要给对,在下面对应的要有:

element plus 下拉列表默认选中有延迟

会先加载id或者编号,然后有点延迟的时间才转换成内容。 [TOC]可以这样解决,绑定的时候给中文名字,然后在改变的时候给Id...

vue elementui,vue3 element plus 文件上传的时候设置其他参数。后台.net接收传递的额外参数。图片上传

比如上传文件的时候额外传递两个select选择的值 前台前面上传文件的时候要提供默认参数很简单,el-upload绑定一个data即可...

vue3 element plus 表格使用vue3常用界面搭配。vue3基础模板使用

一个简单的表格加时间搜索界面效果如下: 代码如下: <template> <div class="app-container"&g...

element plus table 表格 获取选中的行

官网的表格文档就有,直接一个方法就搞定了,看官网表格的文档中的方法介绍就有了 使用getSelectionRows方法即可 <el-...

element plus 日期选择器 限制日期范围。限制只能选择当前月份之后的月份

element plus 日期选择器 可以用disabledDate来限制日期范围。例如限制只能选择当前月份以及之后的月份。 <el-date-pi...

element plus 带提交内容的删除确认框。element plus 确认框

[TOC]Element Plus 带提交内容的删除确认框 ElMessageBox.prompt('是否确认删除数据,涉及到的数据将会被物理删除,...

vue3 element plus table+Sortable.js 行拖动,表格拖动

要先安装好Sortable.js依赖 cnpm install sortable.js 实现拖动的代码如下可以直接复制运行 <template> <...

element plus与element ui 多选表格判断某行是否选中

element plus 多选表格判断每行是否选中@select="selectRow" const selectRow = (selection: any, row: any) ...

element plus tree 获取选中节点的父节点。树获取所有选中的节点

[TOC]element plus tree 获取选中节点的父节点通过 treeRef.value.getNode(data) 获取到当前节点的实例,随后通过 node.par...