此方法试用所有需要重置数据的场景
el-dialog打开一次之后,再次打开之前的数据不会销毁,依然存在。
我们需要在关闭后重新初始化数据。
重置表单的方法
this.$refs[formRef].resetFields();
复制代码
有些数据不是表单中的数据,也需要重置。
难道一个个的重新手动赋值吗?当然可以,就是比较麻烦。好在vue帮我们保存了一份原始数据,直接把data复制为原始数据即可
this.$data = this.$options.data();
复制代码
以上就可以正常运行, 但是如果data中有表单验证相关,会导致控制台出现报错信息,如下面代码中的ruleValidate,排除即可。
data () {
return {
dialogVisible: false,
submitLoading: false,
model: {
id: 0,
carCard: "",
driver: "",
remark: "",
},
ruleValidate: {
carCard: {required: true, message: "不能为空", trigger: "blur"},
},
};
},
复制代码
重置表单数据,使用的地方特别多,我们封装为全局方法
//重置表单,formRef为表单的ref值,excludeFields为要排除重新初始化值得属性
Vue.prototype.$reset = function (formRef, ...excludeFields) {
this.$refs[formRef].resetFields();
let obj1 = this.$data;
let obj2 = this.$options.data.call(this);
if (!excludeFields || excludeFields.length === 0) {
excludeFields = ["ruleValidate"];
}
for (let attrName in obj1) {
if (excludeFields && excludeFields.includes(attrName)) {
continue;
}
obj1[attrName] = obj2[attrName];
}
};
复制代码
使用方法
el-dialog的close事件总调用
<template>
<el-dialog
v-el-drag-dialog
:close-on-click-modal="false"
:visible.sync="dialogVisible"
:title="model.id === 0 ? '新增车辆' : '编辑车辆'"
class="car-edit"
width="450px"
top="5vh"
@close="$reset('form')">
<el-form ref="form"
:model="model"
:rules="ruleValidate"
class="formFillWidth"
label-width="50px">
<el-form-item label="车牌" prop="carCard">
<el-input v-model="model.carCard" placeholder="请输入"/>
</el-form-item>
<el-form-item label="司机" prop="driver">
<el-input v-model="model.driver" placeholder="请输入"/>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="model.remark" placeholder="请输入"/>
</el-form-item>
</el-form>
<span slot="footer">
<el-button @click="dialogVisible = false">取消</el-button>
<el-button :loading="submitLoading" type="primary" @click="handleSubmit">保存</el-button>
</span>
</el-dialog>
</template>
复制代码
所有评论(0)