Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

168
Visualizações
Cree una matriz de respuestas a partir de un componente secundario y luego emita esta matriz al padre en Vue.js 2

Estoy creando una encuesta con Vue 2 y estoy tratando de crear y emitir la matriz de respuestas a un componente principal llamado Evaluación que se ve así: https://pastebin.com/rLEUh56a

Tengo un componente llamado QuestionItem.vue que es hijo de Evaluation y se ve así: https://pastebin.com/RFPgKs5Q

La matriz de respuestas debe ser algo como esto para poder enviarse a la API:

 answers: [ { questionId: "6a9ad778-aacf-4e60-9610-37a767700b9f", questionOptionIds:[ "1bc35f6c-900a-4764-84ee-23531e46e638", ], answer: null }, { questionId: "d1c3f4f0-9525-4e6e-bb81-599d84b5cb02f", questionOptionIds:[], answer: "answered value" }, ]

Donde, si el tipo de question.type es text , range , stars o faces , los identificadores de opción de questionOptionIds deben estar vacíos y la propiedad de answer debe ser el valor respondido, pero si el tipo de question.type es radio o check , la propiedad de respuesta debe ser nula y la propiedad questionOptionIds debe ser la opción de respuesta que eligió el usuario.

No estoy seguro de cómo puedo construir esta matriz a partir de todas las respuestas que se ingresan en el componente QuestionItem.vue.

¡Gracias por su tiempo, que tenga un buen día!

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

No puede usar v-model para sus respuestas en su componente QuestionItem de esa manera:

 <QuestionItem v-for="(question, index) in questions" :key="index" :question="question" :index="questionIndex" v-model="answers" class="flex-none w-full" />

v-model tomará su valor de entrada emitido por el niño y lo establecerá en respuestas, lo que no tiene sentido en este caso ya que las respuestas son una matriz de cada respuesta, en lugar de una respuesta singular.

Necesitará tener un controlador de eventos personalizado en su componente principal. Algo como esto:

 // in Evaluation.vue methods answerChanged(answer) { // remove this answer if it's already in the array answers = answers.filter(a=>a.questionId != answer.questionId); // add the submitted answer answers.push(answer); }

luego, en lugar de v-model, use un controlador de eventos:

 <QuestionItem v-for="(question, index) in questions" :key="index" :question="question" :index="questionIndex" @input="answerChanged" //bind the event handler class="flex-none w-full" />

por último, deberá agregar el questionId al valor que está emitiendo. Esta es una aproximación, es posible que deba adaptar esto para que se ajuste al formato exacto que está buscando:

 watch: { questionValue(newValue) { // emit the value that we want for a single answer in our parent answers array this.$emit('input', { questionId: question.id, questionOptionIds:question.options, answer: newValue }) }, },
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda