Пишу простой тест, вопросы берутся из JSON файла, ответы для которого могут выбираться либо через radio-кнопку, либо через checkbox. Для того чтобы отправить все ответы на тест, я создал массив result, в каждый элемент которого я поместил объект с заголовком вопроса и ответом на этот вопрос.
Открыть кодimport questions from './json/seven_layers_of_fog.json';
export default {
components: { DatePicker,TheMask },
data: function() {
return {
title: questions.title,
questions: questions.questions,
result: []
}
},
created(){
for (var i = 0; i < this.questions.length; i++) {
this.result[i] = {
'title' : this.questions[i].text,
'answer' : ''
}
}
},
}
Итоговый массив имеет следующий вид:
Далее я делаю разметку вопросов:
Открыть код<template>
<div class="quiz">
<h1>{{title}}</h1>
<div v-for="(question,index) in questions" class="quiz__question question" v-if="result.length > 0">
<div class="question__title">
{{index+1}}. {{question.text}}:
<div v-if="question.required" class="question__required">*</div>
</div>
<div class="question__answers">
<div v-for="(ans,i) in question.answers" class="question__answer">
<input :type="question.type" v-model="result[index].answer" :value="ans" :id="'q'+index+'a'+i">
<label :for="'q'+index+'a'+i">{{ans}}</label>
</div>
</div>
</div>
<button class="button" name="button">Закончить тест</button>
</div>
</template>
И вот в строке:
<input :type="question.type" v-model="result[index].answer" :value="ans" :id="'q'+index+'a'+i">
у меня не работает v-model. Если я креплюсь к полю объекта какого-либо элемента массива, то при выборе чекбоксов или радио-кнопок, взаимодействия не происходит. Если же я креплюсь так:
<input :type="question.type" v-model="result[index]" :value="ans" :id="'q'+index+'a'+i">
, то все работает, но как понимаете - объект из элемента массива стирается.
Можно ли как это исправить эту проблему?
P.S. Возможно есть более простые способы сохранить значения выбранных чекбоксов (в виде значений, а не true/false), учитывая что вместо чекбоксов могут быть и радио кнопки, которые как и надо возвращают value инпута.