element表单el-form的resetFields四种失效情况的解决方法汇总

<el-dialog :visible.sync="dialogFormVisible" >
  <el-form ref="Form" :model="brand" >
    <el-form-item label="品牌名称" >
      <el-input v-model="brand.brandName" ></el-input>
    </el-form-item>
    <el-form-item label="排序" >
      <el-input v-model="brand.ordered"></el-input>
    </el-form-item>
    <el-form-item label="备注" >
      <el-input v-model="brand.description"></el-input>
    </el-form-item>
  </el-form>
</el-dialog>
reset(){
    this.$refs.Form.resetFields();
}

该组件原本设置的是 当提交表单并成功返回后,使用resetFields()函数进行整个表单的清空以便下一次输入。

然而在测试中发现,该函数并没有正确的运行。查找了关于resetFields()函数会遇到的问题及其解决方法,总结如下:

1.resetFields()会将表单重置为“初始值”。这个初始值在form的mounted生命流程时候就确定下来,如果创建表单时候就有默认值(例如功能为编辑表单而不是新建表单时),则无法置空而是reset为该默认值。

解决方法:(参考Vue3 | Element Plus resetFields不生效_yimtcode的博客-CSDN博客

  1. 先对form表单界面进行渲染,完成初始化,以防止将要显示的数据当成默认值。
  2. 使用nextTick在下一个DOM再执行数据更新,把数据更新上已经显示的对话框。
const editDialog = () => {
//先进行表单的渲染
  dialogFormVisible.value = true;

  nextTick(() => {
// 在此进行数据更新操作
    let user = {
//模拟数据更新
      'username': 'yimtcode',
      'password': '123456'
    }
    Object.assign(formData.value, user);
  })
}


​

2.<el-form>内没有绑定校验规则,会导致resetFields()失效!【题主就是在这卡住了】

官方文档对resetFields()方法的描述是:对该表单项进行重置,将其值重置为初始值并移除校验结果。因此缺乏校验规则会导致方法内部bug。

解决方法:

加上校验规则部分就能正常重置了。':rules'指定对应规则,prop指定规则所限定的字段。并在data()里补充校验规则部分(此处略去不写)。

<el-form ref="Form" :model="brand" :rules="rules" >
    <el-form-item label="品牌名称" >
        <el-input v-model="brand.brandName" prop="brandName"></el-input>
    </el-form-item>
    <el-form-item label="排序" >
        <el-input v-model="brand.ordered" prop="ordered"></el-input>
    </el-form-item>
    <el-form-item label="备注" >
        <el-input v-model="brand.description" prop="description"></el-input>
    </el-form-item>
</el-form>

3.<el-form>内需要指定ref属性,并且必须绑定model;在调用resetFields()时候使用绑定的ref属性来调用;

reset(){
    this.$refs.Form.resetFields();
}

4.prop中的字段要和v-model中的字段对应上。

  • 13
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值