解决iview table组件动态表头更新时的报错问题

问题:
使用iview的table组件时,需要动态更新表头的数据,会出现如下错误:
You may have an infinite update loop in watcher with expression “columns“
在这里插入图片描述
在网上一通搜索后,大部分的解决办法都是修改源码,但是我个人觉得这并不是一个很好的解决办法,所以,经过我的苦思冥想加实际验证,最终在不修改源码的情况下解决掉了这个让认头大的bug,解决方式如下:(比较简单)

解决方式:
使用v-if延迟加载table组件,在数据更新时,浏览器将重新渲染Dom结构,代码如下

<template>
	// 使用 v-if 延迟加载组件
	<Table v-if="columns.length > 3" border :columns="columns" :data="tableData">
		......
	</Table>
</template>

<script>
	export default {
		......
		methods:  {
			setTableHeadFunc (indexList) {
			     this.columns.splice(1, 0, ...indexList)
			},
			setTableDataFunc (data) {
				// 避免动态修改表头时报错,在更新表头数据前,先将数据初始化
		      if (this.columns.length > 2) {
		        this.columns.splice(1, this.indexList.length)
		      }
				// 避免动态修改表头时报错,表头数据初始化后需要在页面更新完成后再进行数据更新,否则还是会报错
		      this.$nextTick(() => {
		      		// 处理表头数据和其他数据的业务逻辑 
		      		......
		      		// 数据处理完成后调用函数,更新表头数据
		      		this.setTableHeadFunc(newIndexList)
		      }

			}
		}
		......
	}
</script>

其实还有一种方法:去掉默认的表头,使用tableData的数据和自定义的样式来模拟实现表头的展示

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值