Принимает список вопросов в качестве параметра:
props: [ 'questions' ],
Из данных содержит в себе индекс текущего вопроса и массив выбранных ответов:
data: () => ({
index: 0,
answers: [],
}),
Если индекс меньше количества вопросов, значит опрос ещё не окончен, показываем вопрос, в противном случае следует отобразить результаты:
<div v-if="index < questions.length">
вопрос
</div>
<div v-else>
результаты
</div>
Чтобы показать вопрос, отрендерим экземпляр компонента вопроса, передав ему в качестве параметров содержимое элемента массива вопросов + привязав элемент массива ответов:
<question
v-bind="questions[index]"
v-model="answers[index]"
/>
Чтобы перейти к следующему вопросу, достаточно увеличить индекс текущего вопроса (кнопку, пока пользователь не выбрал ответ, можно: а) блокировать -
:disabled="!answers[index]"
; б) скрывать -
v-show="answers[index]"
):
<button @click="index++">дальше</button>
Результаты - список вопросов и соответствующих им (с тем же индексом) ответов:
<div v-for="(n, i) in questions">
{{ n.text }} - {{ answers[i] }}
</div>