element-plus表单重置resetFields方法不生效

我的需求是做一个增删改查,用表格渲染数据,点击新增和编辑按钮的时候显示一个弹出框,每次关闭的时候表单清空数据,我遇到的bug是:先点击添加框再点击编辑框,调用resetFields()方法,表单数据可以被清掉,但是先点击编辑按钮再点击添加框,调用resetFields()就不能清除表单数据了。

分析:不是resetFields()不起作用;而是没搞清楚resetFields()的原理,resetFields方法是将表单重置为form组件dom刚渲染时的初始值,而我的数据是通过表格的scope.row数据直接赋值给表单的,而我表单的数据是通过reactive定义的,在点击编辑按钮的时候就立刻赋值了,所以我的表单初始值就是编辑的那条数据的值(称这条数据为初始编辑数据),调用resetFields()清除也是重置到初始编辑数据;

解决:

第一种:有获取单条数据接口的,用获取接口的数据进行赋值(不推荐,多发了一次请求)

if (state === 'update') {
    console.log('将数据渲染到列表上');
    editId.value = address.id
    const res =await getSingleAddress(editId.value)
    console.log("编辑地址id"+editId.value);
    //使用获取单条数据的接口数据进行赋值渲染
      //以下为初始化编辑表单函数
      Object.keys(addressForm).forEach((key)=>{ 
        addressForm[key] = res.data.result[key]
    })
    console.log("渲染完毕,等待点击按钮");
  }

第二种:不想多请求一次接口或者没有获取单条数据的接口的,可以在给nextTick()里面初始化编辑弹出框的form表单初始值

//当进入编辑状态的时候把数据传给表单
  if (state === 'update') {
    console.log('将数据渲染到列表上');
    editId.value = address.id
    console.log("编辑地址id"+editId.value);
    //使用nextTick方法
    nextTick(()=>{
      //以下为初始化编辑表单函数
      Object.keys(addressForm).forEach((key)=>{ 
      addressForm[key] = address[key]
    })
    })

关键:resetFields方法是将表单重置为form组件dom刚渲染时的初始值

那么:

先点击新增框时,表单里面的数据都为空,所以关闭的时候重置为组件dom刚渲染的初始值,就是空表单,可以正常实现功能

​​​先点击编辑框时,直接赋值编辑框表单的值的话,组件dom刚渲染的初始值就是你赋给编辑框的初始值,这样调用resetFields方法重置的时候,回到的值也是赋给编辑框的初始值,所以你点击新增框的时候还是会有上一次编辑框的数据

分享结束!谢谢~~

element-plus提供了resetFields方法重置表单。在官网的示例代码中,首先需要设置el-form的ref、:model和:rules属性。然后使用ref创建一个表单实例的引用,例如`const ruleFormRef = ref<FormInstance>()`。接着使用reactive创建一个响应式的表单数据对象,例如`const ruleForm = reactive({ name: 'Hello', region: '', ... })`。再创建一个响应式的规则对象,例如`const rules = reactive<FormRules>({ name: \[{ required: true, message: 'Please input Activity name', trigger: 'blur' }, { min: 3, max: 5, message: 'Length should be 3 to 5', trigger: 'blur' }, \], ... })`。最后定义一个resetForm函数来重置表单,例如`const resetForm = (formEl: FormInstance | undefined) => { if (!formEl) return formEl.resetFields() }`。通过调用resetForm函数并传入表单实例,即可实现表单重置功能。\[1\] 另外,根据引用\[2\]的描述,也可以尝试使用resetFields方法的另一种方式来实现部分表单项的重置。可以将需要重置表单项的prop值作为一个数组传入resetFields方法中,即可实现部分表单项的重置功能。 总结起来,element-plus提供了resetFields方法重置表单,可以通过表单实例调用该方法来实现表单重置功能。\[2\]\[3\] #### 引用[.reference_title] - *1* [重置element-plus表单 Vue3](https://blog.csdn.net/tida_yake/article/details/128275955)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Vue3+Element-Plus,重置指定表单项](https://blog.csdn.net/weixin_46873254/article/details/128233691)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Vue3+Element-Plus 登录功能表单重置实现十二](https://blog.csdn.net/weixin_39237340/article/details/121410461)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值