Vue循环渲染组件,v-model绑定的值影响同一类组件

在做问卷调查系统的移动端时,循环渲染单选和多选等组件,同一类组件绑定是一个v-model,当选中一个单选时,其他题目的单选也会被选中,多选、文本框等循环渲染组件也类似。
解决办法可以定义一个对象,将需要的数据先进行一遍处理存入对象,最后再遍历获取需要的数据,这样就可以避免v-model带来的影响。

<!-- 仅演示单选按钮,多选和文本类型类似 -->
<div class="questionnaire" v-for="(item, index) in questionList" :key="item.questionId">
    <!-- 单选类型 -->
    <div class="singleType" v-if="item.typeName === '单选'">
     <div class="size">
        {{index + 1}}、{{item.question}} [<span class="typeName">{{item.typeName}}</span>]
     </div>
     <van-radio-group
     v-model="checkList[item.questionId]"
     direction="horizontal"
     v-for="singleRadio in item.answerOptions"
     :key="singleRadio.id">
      <van-radio
      :name="singleRadio.answer"
      icon-size="18px"
      class="singleRadio"
      >{{singleRadio.answer}}</van-radio>
    </van-radio-group>
    </div>
 </div>
 // 定义的数组和对象
 questionnaireList: [], // 问卷列表
 questionList: [], // 问题列表
 title: null, // 问卷标题
 checkList: {}, // 所选的数据对象
 questionnaireId: '', // 问卷ID
 questionAndAnswers: [] // 答案数组
// 重点函数,将数据分类循环存入checkList对象当中
changeCheckList() {
      for(let i=0; i < this.questionList.length; i++) {
        if(this.questionList[i].typeName === '单选') {
          this.$set(this.checkList, this.questionList[i].questionId, '')
        }
        if(this.questionList[i].typeName === '多选') {
          this.$set(this.checkList, this.questionList[i].questionId, [])
        }
        if(this.questionList[i].typeName === '文本') {
          this.$set(this.checkList, this.questionList[i].questionId, '')
        }
      }
    }
// 在接口请求以后拿到数据就可以执行 changeCheckList 函数
 async getQuestionnaireList() {
      const questionnaireId = this.$route.params.id
      const { data } = await getQuestionnaireById(questionnaireId)
      console.log(data)
      this.questionnaireList = data.data
      this.questionnaireId = this.questionnaireList.questionnaireId
      this.questionList = this.questionnaireList.questionList
      this.changeCheckList()
      this.title = data.data.questionnaireName
    }
  • 最后使用forEach遍历 questionList 数组获取需要的数据!
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值