Каким образом можно ввести свой вариант ответа, при выборе в форме чекбокса «Свой вариант»?

Делаю тест на vue.js, возникает проблема (а вернее полное отсутствие понимания, как правильнее реализовать) со связыванием props и чекбоксов, одним из которых является чекбокс «Свой вариант». В это поле пользователь должен ввести свой ответ.
Как это выглядит
5cee61d94d759399118679.png


Вопросы у меня выстраиваются таким образом:

<div v-for="(question,index) in questions" class="quiz__question question" v-if="result.length > 0">
        <div class="question__error" v-if="nonValidate.includes(index)">
          Ответьте на вопрос
        </div>
        <div class="question__title" :data-question-num="index">
          {{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"
                   :placeholder="[question.type == 'text' ? ans  : '']">
            <label :for="'q'+index+'a'+i">{{ans}}</label>
          </div>
        </div>
    </div>


То есть в цикле прогоняются вопросы и для каждого вопроса берутся свои варианты ответа.

Мне не понятно каким образом можно вместо «Свой вариант» вписать что-нибудь свое. Пока единственный алгоритм, который я придумал:
1. При клике по чекбоксу нужно сделать поле ввода (тут сразу не понятно, как правильно: менять тип инпута не вариант, а как иначе - не понятно)
2. После повесить на появляющийся блок метод в v-on:change, который принимал бы на вход номер вопроса и номер ответа, свой вариант ответа и потом просто перезаписать полученное значение в массиве своих вопросов.

Мне кажется это слишком громоздким, есть варианты проще и рациональнее?
  • Вопрос задан
  • 89 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
Добавляете в массив вопросов свойство, указывающее, что пользователь может ввести собственный ответ. Массив ответов - храните два свойства, предопределённые ответы и пользовательские. В шаблоне, если допускается пользовательский ответ, добавляете соответствующий элемент управления. И ещё нужно будет computed свойство - преобразованный массив ответов, где к предопределённым ответам будет подмешиваться пользовательский.

https://jsfiddle.net/rtv8uyhz/
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы