vue table循环嵌套form表单时高频率传值简单处理

随手记:当form表单被组件引用在table循环中并length大于1时,每次点击保存,$emit方法在form的下标0传回时就执行了保存造成报错,特用防抖来解决。

防抖
  1. 防抖本质上就是优化高频率执行代码的一种手段;
  2. n 秒后在执⾏该事件,若在 n 秒内被重复触发,则重新计时;
  3. 可以通过 setTimeout 实现;
demo实现
<template>
	<el-button @click="thesubmit">提交</el-button>
	<el-tabs type="border-card" v-model="activeName" @tab-click="handleClick">
		<el-tab-pane v-for="(item, index) in arr" :key="index" :label="item.name" :name="index">
			/* 引用form组件,并对form组件已有属性进行赋值 planConfig: {} */
			<forms :submit="submit" :planConfig="planConfig" @submitItem="submitItem"/>
		</el-tab-pane>
	</el-tabs>
</template>

<script>
	import forms from './forms';
	
	export default {
		components: {
			forms,
		},
		data() {
		  return {
			arr: [],
			// 定义是否触发提交
			submit: false,
			// 定时器参数
			timer: null,
		   };
		},
		methods: {
			// 点击提交按钮触发状态发生改变
		   thesubmit() {
		   	  this.submit = true;
		   },
		   // 通过$emit回调方法接收arr[index]的form
		   submitItem(val) {
		     // 回调val包含[index, item],当下标相等时取当前下标的item
		     this.arr.forEach((item, index) => {
		      	if (index === val[0]) {
		      	  this.arr[index].planConfig = val[1];
		      	}
		      }
		      // foreach在取到[0]时,就会触发接口事件,所以添加防抖,在取到所有item之后再进行接口触发
		      if (this.timer) {
		      	 clearTimeout(this.timer);
		      }
		      this.timer = setTimeout(() => {
		      	 // todo request
		      }, 500);
		   },
		},
	}
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值