form-gen-parser 手动根据表单中某项数据给其他表单项赋值

        最近遇到一个需求,需要在fromgener中创建的表单中,根据某个表单项A,去修改其他表单项B,C,D的需求。由于表单是根据json渲染成的,开始使用this.$set(this.$refs.parse.formData,__vModel__+"_header",''),虽然能够讲数据赋值到this.$refs.parse.formData中,但是页面并未正确的显示出赋值的数据。

        再经过多次的各种方法的尝试,最终选择了还是原始的数据回显的方式。

1.parser组件v-if来控制,主要是让数据重新回显,否则不起作用

2.表单项A是一个自定义组件,在change事件中触发bus事件,能够传递给使用该form的页面:

    input_val(val) {
        this.$emit('change', val)   // 向父级组件返回输入的数据
        ...
        this.$bus.$emit('changeInvoice',data) // bus事件,向使用表单的页面传递数据
      },

3.在使用表单的页面接收事件

    mounted(){
      this.$bus.$on("changeInvoice", this.changeInvoice)
    },
    beforeDestroy () {
      this.$bus.$off("changeInvoice")
    },

4.changeInvoice事件,不仅要绑定B,C,D相关组件,同时还要将表单中的其他非相关数据绑定回去,否则其他非相关表单项会置空:

 changeInvoice(val) {
      let formData = this.$refs.parse.formData; 
      let __vModel__=val.__vModel__
      this.ok=false
      this.$nextTick(()=>{
        this.formConf.fields.forEach(item => {
           var __config__ = item.__config__ 
           if(item.__vModel__== (__vModel__+'_header')){ // 赋值相关项
              __config__.defaultValue = val.header
           }else if(item.__vModel__== (__vModel__+'_type')){ // 赋值相关项
              __config__.defaultValue = val.type
           }else{
            __config__.defaultValue=formData[item.__vModel__] // 回传非相关表单项
           }
        });
        this.ok=true
      })
    },

暂时想到的解决办法,以后有了更好的方法再更新。

你可能感兴趣的:(前端,javascript,开发语言)