< element-Ui表格组件:表格多选功能回显勾选时因分页问题,导致无法勾选回显的全部数据 >

这篇具有很好参考价值的文章主要介绍了< element-Ui表格组件:表格多选功能回显勾选时因分页问题,导致无法勾选回显的全部数据 >。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

elementui多选框 数据回显,vue.js,javascript,elementui


👉 前言

在 Vue + elementUi 开发中,elementUI中表格在本身是自带多选功能的,但是在某些情况下,并不能完全适用,甚至可能产生bug。例如本次案例所遇Bug,情景如下:

本案例场景:在表单中,通过表单参数筛选某个明细表格数据,后端要求新增时可多选明细表格中的内容。但由于明细列表存在分页的功能,在回显时,由于element表格提供的勾选函数toggleRowSelection(cur, true)),因为数据不全面,只勾选了当前分页的内容

且由于业务需要,通常在表格中多选方法中都会存储勾选的ID或其他数据的逻辑,这就导致第一次回显勾选的数据,因分页数据导致只勾选当前页中包含的明细,然后触发多选方法,覆盖了回显的数据,导致数据丢失!

接下来,简单阐述下,开发中使用的解决方法!方法并不适用,只提供解决思路,具体问题具体分析!仅供参考!


👉 一、解决思路

遇到这种问题,一般的思路是创建一个中间变量来暂存勾选的内容,但是由于业务复杂度问题,需要在前端切换业务域时,通过本地存储暂存当前相关数据,导致回显时,要考虑的逻辑较多,就排除了再新增变量存储的问题,而且也容易存错,导致二次数据覆盖!

回到问题本身,可以看得出来,是由于分页功能导致的数据回显时,勾选不全的问题。所以就这个问题,与后端沟通,添加 usePage参数,区分是否使用分页,在回显勾选内容的方法内调用,当然这种是基于数据量少的地方才能用,而且需要使用loading,避免长时间加载,导致用户以为页面卡死没数据的情况。

elementui多选框 数据回显,vue.js,javascript,elementui

👉 二、实现代码(仅供参考,具体问题具体分析)

> HTML模板

<el-table
	ref="multipleTable"
	:data="tableData"
	tooltip-effect="light"
	:height="tableHeight"
	:max-height="tableHeight"
	:key="formData.ssywy + tableOption.length"
	style="width: 100%"
	v-loading="tableLoading"
	element-loading-text="拼命加载中"
	element-loading-spinner="el-icon-loading"
	element-loading-background="rgba(0, 0, 0, 0.8)"
	row-key="id"
	@selection-change="handleSelectionChange($event)"
>
	<el-table-column
		type="selection"
		width="55"
		reserve-selection
		fixed="left"
		align="center"
	></el-table-column>
</el-table>

<el-pagination
	@size-change="handleSizeChange"
	@current-change="handleCurrentChange"
	:current-page="params.current"
	:page-sizes="[10, 50, 100, 200]"
	:page-size="params.size"
	background
	layout="prev, pager, next, sizes, jumper, total"
	:total="params.total"
></el-pagination>

> Js模板

// 明细列表多选
handleSelectionChange(val) {
	this.multipleSelection = val
	// window.console.log(this.formData.ywyAndRuleDTO, this.multipleSelection, val)
	this.formData.ywyAndRuleDTO[this.formData.ssywy].defectIds = Array.isArray(val) ? [...new Set(val.map(item => item.id))] : []
},
// 多选表格
async toggleSelection(v) {
  // window.console.log(this.formData.ywyAndRuleDTO, v, this.tableData)
  if (v.length !== 0) {
    let params = {
      ...this.params,
      ruleIds: this.formData.ywyAndRuleDTO[this.formData.ssywy].ruleIds.map(item => item.id),
      ywy: this.formData.ssywy,
      zrdwIds: this.formData.beCheckUnitIds.split(','),
      flag: this.formData.execStatus != undefined ? false : true,
      mark: 'export'
    };
    let rs = await this.riskReVerifyCheckDefectList(params)
    this.$refs["multipleTable"].clearSelection();
    this.tableData = rs.rows || [];
    v.forEach((item) => {
      let cur = this.tableData.find((item_1) => {
        return item === item_1.id;
      })
      if(cur) {
        this.$refs["multipleTable"].toggleRowSelection(cur, true);
      }
    });
  } else {
    this.$refs["multipleTable"].clearSelection();
  }
},
// 查询表格内容
async queryTableList(reset) {
  if (reset) {
    this.setPages();
  }
  
  let params = {
    ...this.params,
    ruleIds: this.formData.ywyAndRuleDTO[this.formData.ssywy].ruleIds.map(item => item.id),
    ywy: this.formData.ssywy,
    zrdwIds: this.formData.beCheckUnitIds.split(','),
    flag: this.formData.execStatus != undefined ? false : true
  };
  
  this.formData.ywyAndRuleDTO[this.formData.ssywy].selectDTO = JSON.parse(JSON.stringify(params))
  
  this.tableData = [];
  
  if(!this.formData.ssywy || Array.isArray(this.formData.ywyAndRuleDTO[this.formData.ssywy].ruleIds) && this.formData.ywyAndRuleDTO[this.formData.ssywy].ruleIds.length === 0) {
    this.$message.warning('请先勾选对应业务域的规则信息!')
    return
  }
  this.tableLoading = true;
  
  // 通过异步操作,进行勾选
  await this.toggleSelection(this.formData.ywyAndRuleDTO[this.formData.ssywy].defectIds)
  
  this.riskReVerifyCheckDefectList(params)
    .then((rs) => {
      if (rs && Array.isArray(rs.rows) && rs.rows.length !== 0) {
        this.tableData = rs.rows;
        this.setPages(rs.current, rs.size, rs.records);
      } else {
        this.tableData = [];
        this.setPages();
      }
    })
    .finally(() => {
      this.tableLoading = false;
    });
},

案例较为粗浅,仅供参考! 若有大佬有更好的解决方案,希望大佬们赐教! 目前暂时还没想出比较简洁的办法! 该解决方案并不成熟,仅以抛砖引玉!


往期内容 💨

🔥 < 每日闲谈:你真的了解 “ ChatGPT ” 嘛 ? >

🔥 < 每日算法 - JavaScript解析:搜索旋转排序数组 >

🔥 < CSS小技巧:类似photoShop的混合模式(mix-blend-mode / background-blend-mode)使用 >

🔥 <开源: 推荐10个开源的前端低代码项目>

🔥 < CSS小技巧:那些不常用,却很惊艳的CSS属性 >文章来源地址https://www.toymoban.com/news/detail-702579.html

到了这里,关于< element-Ui表格组件:表格多选功能回显勾选时因分页问题,导致无法勾选回显的全部数据 >的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue+Element-UI 实现前端分页功能,利用el-table和el-pagination组件实现表格前端分页

    Vue+Element-UI 实现前端分页功能,利用el-table和el-pagination组件实现表格前端分页:         当table的数据量比较大的时候,一个屏幕展示不出全部的数据,这个时候就需要分页显示。而多数情况下都是做的后端分页,就是将分页参数和查询条件一并传到后端,后端将当前页要

    2024年01月20日
    浏览(43)
  • 使用element-ui+vue 做修改功能时,数据不回显问题

    后端数据已经做好了,页面发送数据获取id给后端,查询数据后返回给前段页面。res.data.data数据是可以打印出来的,但是这个_this.from一直打印出来的是undefined,找了很多方式都没有办法把值附上去。请问有什么办法吗 这个是表单页面

    2024年02月16日
    浏览(31)
  • element-ui中的el-table实现分页多选功能

    selection-change事件:当选择项发生变化时会触发该事件(当分页切换时,选中的数据都会自动清空) 链接: https://blog.csdn.net/qq_36157085/article/details/122922678

    2024年02月17日
    浏览(35)
  • element-ui时间日期选择器回显功能以及不能修改问题的解决

    地址:element-ui时间日期选择器不能修改问题的解决 - 走看看 属于是强制更改 编辑的时候,修改了时间,控制台中能看到已修改,可是页面上确没修改而且也不能删除,出现这样的问题,该如何解决? 解决方案:在获取数据回显的时候使用$set: 刚开始是直接赋值(如果不是标

    2024年02月11日
    浏览(33)
  • vue element-ui表格组件动态多级表头

    实际项目的需求,需要根据后端动态获取的方式来初始化表格的表头包含哪些信息,且有很多信息是有规律的,所以我们需要Element UI动态生成多级表头。需要的效果图如下: 由于统计维度是可变化的(它可以是省市也可以是区县),所以需要专门设置一个表格的数据来保存

    2024年02月10日
    浏览(41)
  • element-ui中table表格标签编辑功能的实现

    表格实现编辑功能。在实际开发过程中,我们表格的表头往往很多,有的还会发生变化,所以本文参考一位博主的代码结合自己的项目进行了改编。 参考原文链接:vue element-ui实现table表格可编辑修改

    2024年02月13日
    浏览(38)
  • element-ui table 表格控件实现单选功能

    今天遇到一个需求,感觉挺简单的,需求如下: 就是一个表格,在表格的前面加上一个选择框,注意: 只能单选 然后我就去element ui上粘代码: 虽然element ui上有对应的单选表格,可是并不符合我的需求 然后我又发现下面有一个多选的表格,样式虽然相似,可是还是不符合我

    2024年02月11日
    浏览(43)
  • 【TSX】vue3 + element-ui + tsx 通用表格组件

    简介: 基于 vue3 + el-table 封装的通用表格组件 的 tsx写法,想要参考模板写法的可以到我另一篇博客喔~ TS + vue3.2 + vite2 + element-plus 通用表格组件封装 话不多说,本组件分为四部分: 组件调用:   属性及方法使用说明: 注意:如果你在使用 Sortable插件想要拖动排序表格时,t

    2024年02月15日
    浏览(39)
  • 用element-ui中的up-load组件实现简单的图片上传到本地然后回显(从前端到后端)

    一:前端样式以及效果:  前端样式代码如下: 二:后端Controller层  这里的处理逻辑是将前端传递进来的图片交给FileUtil处理,接下来看FileUtil的代码: 首先获取传递进来图片的文件名后缀 然后用UUID将其拼接得到一个新的名字 将图片存入到本地的文件夹下面 接下来返回路

    2024年02月03日
    浏览(35)
  • element-ui table-自定义表格某列的表头样式或者功能

    自带表格 自定义表格某列的表头样式或者功能

    2024年02月03日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包