动态表单组件的清空

848 阅读1分钟

今天给大家封装一个element表单数据清空的方法。之前有把element的表单进行动态封装,这样的话再去调用element的表单清空方法就需要this.$refs.['表单ref名'].resetFields()来进行清空,但是有些例如富文本编辑器组件,二次封装的图片上传组件等等;利用resetFields表单重置函数不能完全做到清空,这个时候就需要我们手动清空。 我见过好多人这样写

this.form = {
    a:'',
    b:[],
    c:''
    ...
}
或
this.form.a = '';
this.form.b = [];
this.form.c =''

表单内容少也就罢了,有些管理系统有好多表单内容,一条条字段清空? 废话不多说,上代码先:

export function clearObject(obj,_this,ref){
    let data = {...obj}
    for (var key in data){
        if(data[key].isArray){
            data[key] = []
        }else{
            data[key] = ''
        }
    };
    _this.myForm = data;
    _this.$nextTick(()=>{
        ref.resetForm();
    })
    return Promise.resolve(data)
}

说一下参数,obj是我们绑定的表单数据,例如

myForm:{
    name:'',
    vscode:'',
    prodType:'',
    prodp:'2',
    commissions:['1','5'],
    commdate:'',
    commdatetime:'',
    images:['https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif?imageView2/1/w/80/h/80'],
    editor:'',
},

_this是把页面的this指向传过去,让我们可以在方法内就能得到当前的this.form,从而顺利清空对象; ref是已经封装好的动态表单的ref属性名;


<dynamic-form :myForm="myForm" :formData="formData" ref="dynamic" :inline="false">
    <div slot="handle">
        <el-button type="primary" @click="onSubmit()">{{submitText}}</el-button>
        <el-button type="success" @click="clear()">清空</el-button>
        <el-button type="warning">取消</el-button>
    </div>
</dynamic-form>
methods:{
    //点击提交,校验表单,进行业务操作
    clear(){
        //clearObject方法循环遍历清空对象属性值
        clearObject(this.myForm,this,this.$refs.dynamic).then();
    },
    //提交
    async onSubmit(){}
}

clearObject方法中的ref.resetForm()方法,就是我们在动态表单组件中使用的element提供的清空方法;

//重置
resetForm(){
    this.$refs['customForm'].resetFields();
},

至于动态表单组件,大家可以去看我之前写的这篇 封装一个动态表单吧