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来控制,主要是让数据重新回显,否则不起作用

<parser v-if="formConf && ok" :form-conf="formConf" ref="parse" />

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
      })
    },

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值