Vue—nextTick对于重置表单的坑

文章讨论了在Vue中使用nextTick清理表单数据时遇到的问题,特别是当涉及到子组件和同组件表单时。在同组件表单中,由于el-dialog在未激活时不会渲染,导致resetFields方法找不到引用。作者提出了两种解决方案:一是先打开对话框再进行重置;二是检查form是否存在后再执行重置操作。这两种方法都能避免运行时错误。
摘要由CSDN通过智能技术生成

需求

需要清空表单中遗留的内容

需求解决方法

采用
this.nextTick(() =>{ this.$refs['form'].resetFields() }
并在点击添加按钮的时候,调用此方法
form请参照自己的ref

对于子组件表单

该方法在子组件使用中没有问题,且在首次加载时并不报错

对于同组件表单

但是在同项目中,采用了同组件表单,即
<el-dialog :visable.sync='open'>
点击按钮将open变为rue时,产生报错

TypeError: Cannot read property ‘resetFields’ of undefined

经过测试,发现该现象只出现在同组件表单中,并在控制台中Elements查看源码的时候发现,在首次加载页面的时候
<el-dialog :visable.sync='open'>
此种方法的表单在没有点击按钮的情况下,是没有渲染的
这就导致了
this.nextTick(() =>{ this.$refs['form'].resetFields() }
该方法找不到这个form

问题解决方法

所以提出2种解决方法,
第一种:
采用先渲染,在清空的方法

this.open = true
this.nextTick(() =>{
	this.$refs['form'].resetFields()
	}

第二种:
判断来自数据中的form是否为undefined,直接跳过第一次的清空

if(this.$refs['form'] !== undefined){
	this.$refs['form'].resetFields()
	}

以上仅记录个人见解,且目前并没有业务逻辑错误产生,有错希望各位指正,欢迎互相探讨。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值