vue for 循环element ui 多选按钮组 el-checkbox-group ,单选按钮el-radio-group,输入框el-input,绑定值重复问题

22 篇文章 1 订阅
9 篇文章 0 订阅

前言:最近在做项目,有个做题的需求,分别有单选题,多选题,问答题,三种题型。因为题的数量不确定,所以肯定是for 循环每一道题,完了之后发现有问题;

问题:

for循环之后,就会发现,这三种组件( el-checkbox-group,el-radio-group,el-input)以下简称组件。都是只绑定一个变量,来获取当前的值,所以for循环之后绑定的值是一样的,导致出现bug;例如下面的v-model 绑定的值:其余组件一样,不做重复介绍

<div v-for="(item,index) in questions" :key="index">
                        <div class="tj_team fen_team" v-if="item.type==2">  <!--单选问题-->
                            {{item.sort}}.&nbsp;&nbsp;{{item.description}}?(单选) <br>
                            <el-radio-group v-model="checkList[item.id]" class="w_radio">
                                <el-radio :label="i.id" v-for="(i,d) in item.options" :key="d">{{i.sort}}{{i.explain}}
                                </el-radio>
                            </el-radio-group>
                        </div>
</div>

解决:

只要把绑定的值变成一个对象就可以了,例如我上面的写法。由于我的需求是答题:所以我的思路是把当前题的id 变成当前对象  键名(每个对象的键名为当前题到id,对象的键值为当前题的答案);代码如下:

先在data中初始化checkList 为{}    空对象;下面为重点,必须使用$set,因为vue 不能检测对象动态添加的属性值,所以提供了$set方法;

for (var i = 0; i < this.questions.length; i++) {
                            if (this.questions[i].type == 1) {   //问答题   让当前对象的键名 为当前题的id
                                this.$set(this.checkList, this.questions[i].id, '')
                            }
                            if (this.questions[i].type == 3) {   //多选题
                                this.$set(this.checkList, this.questions[i].id, [])
                            }
                            if (this.questions[i].type == 2) {     //单选题
                                this.$set(this.checkList, this.questions[i].id, '')
                            }
                        }

最后只需要for in 循环这个checkList ,把相应的值组成数组传给后台即可;

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值