Vue2x component 动态渲染不同tab下的html组件

一、需求

最近新项目中有个需求,在新建任务时需要根据选定的场景来动态渲染不同tab页下的html组件,如下图:

二、思路及功能实现

动态渲染组件就想到了Vue的component内置组件来实现。组件中不同的html组件渲染通过is判断,封装不同的组件,比如input输入框、下拉选择select组件等,并引入。

主要代码如下:

<el-tab-pane
                        label="任务配置"
                        name="SCENE"
                    >
                        <div class="componentContainer">
                            <div
                                class="componentLiItem"
                                v-for="item in sceneParamList"
                                :key="item.paramName"
                            >
                                <div class="label-title">{{ item.paramName + ':' }}</div>
                                <component
                                    :is="getComponentType(item.displayValue)"
                                    v-bind:value.sync="item.paramValue"
                                    :paramName="item.paramName"
                                    :paramType="item.paramType"
                                    :displayValue="item.displayValue"
                                    :dataDomain="item.dataDomain"
                                    :childTreeId="taskChildTreeId"
                                    v-if="taskChildTreeId != null"
                                    :isShow="item.isShow === 'Y' ? true : false"
                                    @doInput="getInputVal"
                                    @doTextarea="getTextareaVal"
                                    @doInputNumber="getInputNumberVal"
                                    @selectChange="getTaskChangeVal"
                                    @dateChange="getDateChangeVal"
                                    @radioInput="getRadioInputVal"
                                    @checkChange="getCheckedVal"
                                    @fileChange="getFileVal"
                                >
                                </component>
                            </div>
                        </div>
                    </el-tab-pane>
// 获取tab标签页下的子组件-输入框的值
        getInputVal(val, name, displayValue, paramType) {
            if (paramType === "SCENE") {
                for (let i = 0; i < this.sceneParamList.length; i++) {
                    let param = this.sceneParamList[i];
                    if (param.displayValue === displayValue) {
                        if (param.paramName === name) {
                            param.paramValue = val;
                        }
                    }
                }
            }
            if (paramType === "SOURCE") {
                for (let i = 0; i < this.sourceParamList.length; i++) {
                    let param = this.sourceParamList[i];
                    if (param.displayValue === displayValue) {
                        if (param.paramName === name) {
                            param.paramValue = val;
                        }
                    }
                }
            }
            if (paramType === "TARGET") {
                for (let i = 0; i < this.targetParamList.length; i++) {
                    let param = this.targetParamList[i];
                    if (param.displayValue === displayValue) {
                        if (param.paramName === name) {
                            param.paramValue = val;
                        }
                    }
                }
            }
        },

三、遇到的问题

在动态渲染不同标签页下html组件中,未知参数名的下拉框组件赋值是空的

四、原因

 排查之后才发现是自己考虑不周,参数名、参数类型、显示方式等都是动态传入的。搜嘎,这不就找到问题所在了么。

那就应该根据不同tab的参数类型来判断不同参数名的下拉框组件、应该在哪个列表中进行赋值显示。

五、解决方法

根据不同tab下的参数类型、循环不同的参数列表,进而判断显示方式,参数名是否与传入的一致,然后再进行赋值。完美解决~~~~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值