如何将无线电输入字段存储在嵌套的V-For循环中

发布于 2025-02-06 20:14:09 字数 11535 浏览 0 评论 0原文

我想将输入数据存储在嵌套v-for 的问题上是当我获得第二个v-for索引时,索引号不是唯一的,下面的代码是我的嵌套的v-for循环第一个循环是为了获取问题,第二个循环是为了获得

       <div
            v-for="(exam, index) in FilteredExams[0].Questions"
            v-show="index < this.stageNumber"
            :class="{
              dspnone:
                DspLastItem &&
                index < this.stageNumber - this.StageOnChange,
            }"
            :key="index + RandomKey()"
            class="flex flex-col gap-5"
          >
            <!-- questions -->
            <p class="text-secondary-600 font-bold">{{ exam.question }}</p>
            <!-- ----- answers ------ -->
            <div
              v-for="(exam, index) in FilteredExams[0].Questions[index].Answers"
              :key="index + RandomKey()"
              class="flex gap-3 items-center"
            >
              <input
                type="radio"
                :name="index !== 0 ? 'answer' +  this.RadioNumber : ++this.RadioNumber && 'answer' + this.RadioNumber"
                :value="exam.answer"
                v-model="ExamAnswers[index]"
              />
              <label class="text-sm text-secondary-600">
                {{ exam.answer }}
              </label>
            </div>
          </div>

以下代码的答案是我的数据部分:

  data() {
return {
  DspLastItem: false,
  stageNumber: null,
  StageOnChange: null,
  StageCount: null,
  RadioNumber: 1,
  StepCount: [],
  exams: [],
  FilteredExams: [],
  errors: [],
  ExamAnswers: [], 
};

},

这是我的API数据

[
{
    "ExamTitle": "تست شخصیت",
    "ExamImage": {
        "url": "http://localhost/wp-content/uploads/2022/06/personalitytest.png",
        "id": "27",
        "width": "217",
        "height": "232",
        "thumbnail": "http://localhost/wp-content/uploads/2022/06/personalitytest.png",
        "alt": "",
        "title": "personalitytest",
        "description": ""
    },
    "ExamDesc": "در حدود ۴۶۰ سال قبل از میلاد مسیح، بقراط اظهار داشت که انسان ها دارای شخصیت هستند، شخصیتی که از چهار حالت متمایز تشکیل شده است. وی گفت که هر ویژگی که در افراد حاکم تر باشد، حالت آن ها و در نتیجه شخصیت منحصر به فرد آن ها را تعیین می کند.",
    "Questions": [
        {
            "question": "آیا ترجیح می دهید زندگی تان سرشار از تغییر باشد؟",
            "MainAnswer": "بله",
            "Answers": [
                {
                    "answer": "نمیدانم ",
                    "AnswerWeight": "10"
                },
                {
                    "answer": "بله",
                    "AnswerWeight": "20"
                },
                {
                    "answer": "خیر",
                    "AnswerWeight": "5"
                }
            ]
        },
        {
            "question": "آیا شخص جاه طلبی هستید؟",
            "MainAnswer": "بله",
            "Answers": [
                {
                    "answer": "بله",
                    "AnswerWeight": "20"
                },
                {
                    "answer": "نمیدانم",
                    "AnswerWeight": "30"
                },
                {
                    "answer": "خیر ",
                    "AnswerWeight": "15"
                },
                {
                    "answer": "مطمین نیستم",
                    "AnswerWeight": "30"
                }
            ]
        },
        {
            "question": "چه میزان به زندگی امیدوار هستید؟",
            "MainAnswer": "زیاد",
            "Answers": [
                {
                    "answer": "بسیار کم",
                    "AnswerWeight": "5"
                },
                {
                    "answer": "بسیار زیاد",
                    "AnswerWeight": "10"
                },
                {
                    "answer": "خیلی زیاد",
                    "AnswerWeight": "20"
                },
                {
                    "answer": "در حد عالی ",
                    "AnswerWeight": "50"
                },
                {
                    "answer": "بیش از 90 درصد",
                    "AnswerWeight": "100"
                }
            ]
        },
        {
            "question": "چرا دلیل سکته های قلبی زیاد است",
            "MainAnswer": "زیاد",
            "Answers": [
                {
                    "answer": "بسیار کم",
                    "AnswerWeight": "5"
                },
                {
                    "answer": "بسیار زیاد",
                    "AnswerWeight": "10"
                },
                {
                    "answer": "خیلی زیاد",
                    "AnswerWeight": "20"
                },
                {
                    "answer": "در حد عالی ",
                    "AnswerWeight": "50"
                },
                {
                    "answer": "بیش از 90 درصد",
                    "AnswerWeight": "100"
                }
            ]
        },
        {
            "question": "آیا آب و هوایی با دمای یکنواخت را ترجیح می دهید؟",
            "MainAnswer": "زیاد",
            "Answers": [
                {
                    "answer": "بسیار کم",
                    "AnswerWeight": "5"
                },
                {
                    "answer": "بسیار زیاد",
                    "AnswerWeight": "10"
                },
                {
                    "answer": "خیلی زیاد",
                    "AnswerWeight": "20"
                },
                {
                    "answer": "در حد عالی ",
                    "AnswerWeight": "50"
                },
                {
                    "answer": "بیش از 90 درصد",
                    "AnswerWeight": "100"
                }
            ]
        },
        {
            "question": "آیا دوست دارید ورزش های خشن را در تلویزیون تماشا کنید؟",
            "MainAnswer": "زیاد",
            "Answers": [
                {
                    "answer": "بسیار کم",
                    "AnswerWeight": "5"
                },
                {
                    "answer": "بسیار زیاد",
                    "AnswerWeight": "10"
                },
                {
                    "answer": "خیلی زیاد",
                    "AnswerWeight": "20"
                },
                {
                    "answer": "در حد عالی ",
                    "AnswerWeight": "50"
                },
                {
                    "answer": "بیش از 90 درصد",
                    "AnswerWeight": "100"
                }
            ]
        },
        {
            "question": "آیا هیچ وقت تمایل داشته اید کسی را بکشید؟",
            "MainAnswer": "زیاد",
            "Answers": [
                {
                    "answer": "بسیار کم",
                    "AnswerWeight": "5"
                },
                {
                    "answer": "بسیار زیاد",
                    "AnswerWeight": "10"
                },
                {
                    "answer": "خیلی زیاد",
                    "AnswerWeight": "20"
                },
                {
                    "answer": "در حد عالی ",
                    "AnswerWeight": "50"
                },
                {
                    "answer": "بیش از 90 درصد",
                    "AnswerWeight": "100"
                }
            ]
        },
        {
            "question": "اگر در کمیته ای عضو باشید، آیا دوست دارید ریاست آن را به عهده بگیرید؟",
            "MainAnswer": "زیاد",
            "Answers": [
                {
                    "answer": "بسیار کم",
                    "AnswerWeight": "5"
                },
                {
                    "answer": "بسیار زیاد",
                    "AnswerWeight": "10"
                },
                {
                    "answer": "خیلی زیاد",
                    "AnswerWeight": "20"
                },
                {
                    "answer": "در حد عالی ",
                    "AnswerWeight": "50"
                },
                {
                    "answer": "بیش از 90 درصد",
                    "AnswerWeight": "100"
                }
            ]
        },
        {
            "question": "آیا حاضرید داروهایی را مصرف کنید که موجب توهم می شوند؟",
            "MainAnswer": "زیاد",
            "Answers": [
                {
                    "answer": "بسیار کم",
                    "AnswerWeight": "5"
                },
                {
                    "answer": "بسیار زیاد",
                    "AnswerWeight": "10"
                },
                {
                    "answer": "خیلی زیاد",
                    "AnswerWeight": "20"
                },
                {
                    "answer": "در حد عالی ",
                    "AnswerWeight": "50"
                },
                {
                    "answer": "بیش از 90 درصد",
                    "AnswerWeight": "100"
                }
            ]
        },
        {
            "question": "آیا آن قدر از دست بقیه عصبانی می شوید که سرشان داد بزنید؟",
            "MainAnswer": "زیاد",
            "Answers": [
                {
                    "answer": "بسیار کم",
                    "AnswerWeight": "5"
                },
                {
                    "answer": "بسیار زیاد",
                    "AnswerWeight": "10"
                },
                {
                    "answer": "خیلی زیاد",
                    "AnswerWeight": "20"
                },
                {
                    "answer": "در حد عالی ",
                    "AnswerWeight": "50"
                },
                {
                    "answer": "بیش از 90 درصد",
                    "AnswerWeight": "100"
                }
            ]
        },
        {
            "question": "آیا مشارکت خلاقی در جامعه خود دارید؟",
            "MainAnswer": "زیاد",
            "Answers": [
                {
                    "answer": "بسیار کم",
                    "AnswerWeight": "5"
                },
                {
                    "answer": "بسیار زیاد",
                    "AnswerWeight": "10"
                },
                {
                    "answer": "خیلی زیاد",
                    "AnswerWeight": "20"
                },
                {
                    "answer": "در حد عالی ",
                    "AnswerWeight": "50"
                },
                {
                    "answer": "بیش از 90 درصد",
                    "AnswerWeight": "100"
                }
            ]
        },
        {
            "question": "آیا از کار خود لذت می برید؟",
            "MainAnswer": "زیاد",
            "Answers": [
                {
                    "answer": "بسیار کم",
                    "AnswerWeight": "5"
                },
                {
                    "answer": "بسیار زیاد",
                    "AnswerWeight": "10"
                },
                {
                    "answer": "خیلی زیاد",
                    "AnswerWeight": "20"
                },
                {
                    "answer": "در حد عالی ",
                    "AnswerWeight": "50"
                },
                {
                    "answer": "بیش از 90 درصد",
                    "AnswerWeight": "100"
                }
            ]
        }
    ],
    "MinNumberToDown": "5",
    "MinNumberToDownMsg": "شخصت شما غیر عادی است",
    "MinNumber": "10",
    "MaxNumber": "20",
    "MinToMaxMsg": "شخصیت شما نرمال است",
    "MaxNumberToUp": "20",
    "MaxNumberToUpMsg": "شخصیت شما فوق العاده است"
}

]

我该如何解决问题?

I want to store input data in a nested v-for the problem is when I get a second v-for index the index number is not unique, the code below is my nested v-for loop first loop is for getting questions and the second loop is for getting answers

       <div
            v-for="(exam, index) in FilteredExams[0].Questions"
            v-show="index < this.stageNumber"
            :class="{
              dspnone:
                DspLastItem &&
                index < this.stageNumber - this.StageOnChange,
            }"
            :key="index + RandomKey()"
            class="flex flex-col gap-5"
          >
            <!-- questions -->
            <p class="text-secondary-600 font-bold">{{ exam.question }}</p>
            <!-- ----- answers ------ -->
            <div
              v-for="(exam, index) in FilteredExams[0].Questions[index].Answers"
              :key="index + RandomKey()"
              class="flex gap-3 items-center"
            >
              <input
                type="radio"
                :name="index !== 0 ? 'answer' +  this.RadioNumber : ++this.RadioNumber && 'answer' + this.RadioNumber"
                :value="exam.answer"
                v-model="ExamAnswers[index]"
              />
              <label class="text-sm text-secondary-600">
                {{ exam.answer }}
              </label>
            </div>
          </div>

the code below is my data section:

  data() {
return {
  DspLastItem: false,
  stageNumber: null,
  StageOnChange: null,
  StageCount: null,
  RadioNumber: 1,
  StepCount: [],
  exams: [],
  FilteredExams: [],
  errors: [],
  ExamAnswers: [], 
};

},

this is my API data

[
{
    "ExamTitle": "تست شخصیت",
    "ExamImage": {
        "url": "http://localhost/wp-content/uploads/2022/06/personalitytest.png",
        "id": "27",
        "width": "217",
        "height": "232",
        "thumbnail": "http://localhost/wp-content/uploads/2022/06/personalitytest.png",
        "alt": "",
        "title": "personalitytest",
        "description": ""
    },
    "ExamDesc": "در حدود ۴۶۰ سال قبل از میلاد مسیح، بقراط اظهار داشت که انسان ها دارای شخصیت هستند، شخصیتی که از چهار حالت متمایز تشکیل شده است. وی گفت که هر ویژگی که در افراد حاکم تر باشد، حالت آن ها و در نتیجه شخصیت منحصر به فرد آن ها را تعیین می کند.",
    "Questions": [
        {
            "question": "آیا ترجیح می دهید زندگی تان سرشار از تغییر باشد؟",
            "MainAnswer": "بله",
            "Answers": [
                {
                    "answer": "نمیدانم ",
                    "AnswerWeight": "10"
                },
                {
                    "answer": "بله",
                    "AnswerWeight": "20"
                },
                {
                    "answer": "خیر",
                    "AnswerWeight": "5"
                }
            ]
        },
        {
            "question": "آیا شخص جاه طلبی هستید؟",
            "MainAnswer": "بله",
            "Answers": [
                {
                    "answer": "بله",
                    "AnswerWeight": "20"
                },
                {
                    "answer": "نمیدانم",
                    "AnswerWeight": "30"
                },
                {
                    "answer": "خیر ",
                    "AnswerWeight": "15"
                },
                {
                    "answer": "مطمین نیستم",
                    "AnswerWeight": "30"
                }
            ]
        },
        {
            "question": "چه میزان به زندگی امیدوار هستید؟",
            "MainAnswer": "زیاد",
            "Answers": [
                {
                    "answer": "بسیار کم",
                    "AnswerWeight": "5"
                },
                {
                    "answer": "بسیار زیاد",
                    "AnswerWeight": "10"
                },
                {
                    "answer": "خیلی زیاد",
                    "AnswerWeight": "20"
                },
                {
                    "answer": "در حد عالی ",
                    "AnswerWeight": "50"
                },
                {
                    "answer": "بیش از 90 درصد",
                    "AnswerWeight": "100"
                }
            ]
        },
        {
            "question": "چرا دلیل سکته های قلبی زیاد است",
            "MainAnswer": "زیاد",
            "Answers": [
                {
                    "answer": "بسیار کم",
                    "AnswerWeight": "5"
                },
                {
                    "answer": "بسیار زیاد",
                    "AnswerWeight": "10"
                },
                {
                    "answer": "خیلی زیاد",
                    "AnswerWeight": "20"
                },
                {
                    "answer": "در حد عالی ",
                    "AnswerWeight": "50"
                },
                {
                    "answer": "بیش از 90 درصد",
                    "AnswerWeight": "100"
                }
            ]
        },
        {
            "question": "آیا آب و هوایی با دمای یکنواخت را ترجیح می دهید؟",
            "MainAnswer": "زیاد",
            "Answers": [
                {
                    "answer": "بسیار کم",
                    "AnswerWeight": "5"
                },
                {
                    "answer": "بسیار زیاد",
                    "AnswerWeight": "10"
                },
                {
                    "answer": "خیلی زیاد",
                    "AnswerWeight": "20"
                },
                {
                    "answer": "در حد عالی ",
                    "AnswerWeight": "50"
                },
                {
                    "answer": "بیش از 90 درصد",
                    "AnswerWeight": "100"
                }
            ]
        },
        {
            "question": "آیا دوست دارید ورزش های خشن را در تلویزیون تماشا کنید؟",
            "MainAnswer": "زیاد",
            "Answers": [
                {
                    "answer": "بسیار کم",
                    "AnswerWeight": "5"
                },
                {
                    "answer": "بسیار زیاد",
                    "AnswerWeight": "10"
                },
                {
                    "answer": "خیلی زیاد",
                    "AnswerWeight": "20"
                },
                {
                    "answer": "در حد عالی ",
                    "AnswerWeight": "50"
                },
                {
                    "answer": "بیش از 90 درصد",
                    "AnswerWeight": "100"
                }
            ]
        },
        {
            "question": "آیا هیچ وقت تمایل داشته اید کسی را بکشید؟",
            "MainAnswer": "زیاد",
            "Answers": [
                {
                    "answer": "بسیار کم",
                    "AnswerWeight": "5"
                },
                {
                    "answer": "بسیار زیاد",
                    "AnswerWeight": "10"
                },
                {
                    "answer": "خیلی زیاد",
                    "AnswerWeight": "20"
                },
                {
                    "answer": "در حد عالی ",
                    "AnswerWeight": "50"
                },
                {
                    "answer": "بیش از 90 درصد",
                    "AnswerWeight": "100"
                }
            ]
        },
        {
            "question": "اگر در کمیته ای عضو باشید، آیا دوست دارید ریاست آن را به عهده بگیرید؟",
            "MainAnswer": "زیاد",
            "Answers": [
                {
                    "answer": "بسیار کم",
                    "AnswerWeight": "5"
                },
                {
                    "answer": "بسیار زیاد",
                    "AnswerWeight": "10"
                },
                {
                    "answer": "خیلی زیاد",
                    "AnswerWeight": "20"
                },
                {
                    "answer": "در حد عالی ",
                    "AnswerWeight": "50"
                },
                {
                    "answer": "بیش از 90 درصد",
                    "AnswerWeight": "100"
                }
            ]
        },
        {
            "question": "آیا حاضرید داروهایی را مصرف کنید که موجب توهم می شوند؟",
            "MainAnswer": "زیاد",
            "Answers": [
                {
                    "answer": "بسیار کم",
                    "AnswerWeight": "5"
                },
                {
                    "answer": "بسیار زیاد",
                    "AnswerWeight": "10"
                },
                {
                    "answer": "خیلی زیاد",
                    "AnswerWeight": "20"
                },
                {
                    "answer": "در حد عالی ",
                    "AnswerWeight": "50"
                },
                {
                    "answer": "بیش از 90 درصد",
                    "AnswerWeight": "100"
                }
            ]
        },
        {
            "question": "آیا آن قدر از دست بقیه عصبانی می شوید که سرشان داد بزنید؟",
            "MainAnswer": "زیاد",
            "Answers": [
                {
                    "answer": "بسیار کم",
                    "AnswerWeight": "5"
                },
                {
                    "answer": "بسیار زیاد",
                    "AnswerWeight": "10"
                },
                {
                    "answer": "خیلی زیاد",
                    "AnswerWeight": "20"
                },
                {
                    "answer": "در حد عالی ",
                    "AnswerWeight": "50"
                },
                {
                    "answer": "بیش از 90 درصد",
                    "AnswerWeight": "100"
                }
            ]
        },
        {
            "question": "آیا مشارکت خلاقی در جامعه خود دارید؟",
            "MainAnswer": "زیاد",
            "Answers": [
                {
                    "answer": "بسیار کم",
                    "AnswerWeight": "5"
                },
                {
                    "answer": "بسیار زیاد",
                    "AnswerWeight": "10"
                },
                {
                    "answer": "خیلی زیاد",
                    "AnswerWeight": "20"
                },
                {
                    "answer": "در حد عالی ",
                    "AnswerWeight": "50"
                },
                {
                    "answer": "بیش از 90 درصد",
                    "AnswerWeight": "100"
                }
            ]
        },
        {
            "question": "آیا از کار خود لذت می برید؟",
            "MainAnswer": "زیاد",
            "Answers": [
                {
                    "answer": "بسیار کم",
                    "AnswerWeight": "5"
                },
                {
                    "answer": "بسیار زیاد",
                    "AnswerWeight": "10"
                },
                {
                    "answer": "خیلی زیاد",
                    "AnswerWeight": "20"
                },
                {
                    "answer": "در حد عالی ",
                    "AnswerWeight": "50"
                },
                {
                    "answer": "بیش از 90 درصد",
                    "AnswerWeight": "100"
                }
            ]
        }
    ],
    "MinNumberToDown": "5",
    "MinNumberToDownMsg": "شخصت شما غیر عادی است",
    "MinNumber": "10",
    "MaxNumber": "20",
    "MinToMaxMsg": "شخصیت شما نرمال است",
    "MaxNumberToUp": "20",
    "MaxNumberToUpMsg": "شخصیت شما فوق العاده است"
}

]

how can I solve the problem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

扎心 2025-02-13 20:14:09

您需要重命名index变量的内部实例,以便能够彼此区分它们。例如,实例inniNIndex

这是我的意思的示例:

<div
  v-for="(exam, index) in FilteredExams[0].Questions"
  v-show="index < this.stageNumber"
  :class="{
        dspnone:
        DspLastItem &&
        index < this.stageNumber - this.StageOnChange,
    }"
  :key="index + RandomKey()"
  class="flex flex-col gap-5"
>
  <!-- questions -->
  <p class="text-secondary-600 font-bold">{{ exam.question }}</p>
  <!-- ----- answers ------ -->
  <div
    v-for="(exam, innerIndex) in FilteredExams[0].Questions[index].Answers"
    :key="innerIndex + RandomKey()"
    class="flex gap-3 items-center"
  >
    <input
      type="radio"
      :name="index !== 0 ? 'answer' +  this.RadioNumber : ++this.RadioNumber && 'answer' + this.RadioNumber"
      :value="exam.answer"
      v-model="ExamAnswers[index]"
    />
    <label class="text-sm text-secondary-600"> {{ exam.answer }} </label>
  </div>
</div>

应该这样做。请注意,我仅在Inner vor的破坏参数和以下中,如何将index转换为inninIndex:键绑定。

在样本中可以简化更多的东西,但这是这个问题。

You need to rename the inner instance of the index variable to be able to distinguish them from each other. For instance innerIndex.

Here's a sample of what I mean:

<div
  v-for="(exam, index) in FilteredExams[0].Questions"
  v-show="index < this.stageNumber"
  :class="{
        dspnone:
        DspLastItem &&
        index < this.stageNumber - this.StageOnChange,
    }"
  :key="index + RandomKey()"
  class="flex flex-col gap-5"
>
  <!-- questions -->
  <p class="text-secondary-600 font-bold">{{ exam.question }}</p>
  <!-- ----- answers ------ -->
  <div
    v-for="(exam, innerIndex) in FilteredExams[0].Questions[index].Answers"
    :key="innerIndex + RandomKey()"
    class="flex gap-3 items-center"
  >
    <input
      type="radio"
      :name="index !== 0 ? 'answer' +  this.RadioNumber : ++this.RadioNumber && 'answer' + this.RadioNumber"
      :value="exam.answer"
      v-model="ExamAnswers[index]"
    />
    <label class="text-sm text-secondary-600"> {{ exam.answer }} </label>
  </div>
</div>

That should do it. Notice how I've only changed the index to innerIndex in the destructured argument of the inner v-for and in the following :key binding.

There are more that can be simplified and made more clear in your sample, but that is beyond this question.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文