<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博客)
- 先对form表单界面进行渲染,完成初始化,以防止将要显示的数据当成默认值。
- 使用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(); }
复制