Общие компоненты в vue

Я делаю викторину на Vue.js, вопросы викторины могут быть разных типов:

  • Выберите один
  • Выберите несколько
  • Выберите изображение
  • Соответствовать

Моя проблема в том, что типы вопросов смешаны (например, вы можете использовать любой из них в викторине) и, следовательно, представляют собой разные компоненты (<x-select-one-question>, <x-select-multiple-question>, <x-select-image-question>, <x-match> и т. д.), поэтому я не могу просто добавить один компонент в викторину.

Как я могу и должен ли я сделать универсальный компонент для этого? Может быть, что-то вроде этого?

<template>
  <div>
    <x-question 
      v-for = "(question, index) in questions" 
      :key = "index" 
      type = "question.type"></x-question>
  </div>
</template>
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
0
3 882
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ваш компонент может быть чем-то вроде этого

<template>
<select v-if = "type == 'select'">
  <option v-for = "item in items" value = "item.value">{{ item.text }}</option>
</select>
<select v-else-if = "type == 'multiple'" multiple>
  <option v-for = "item in items" value = "item.value">{{ item.text }}</option>
</select>
<input v-else-if = "type == 'image'" type = "file" id = "image" name = "image" accept = "image/png, image/jpeg">
</template>

Vue.component('question', {
  template: '#question',
  props: {
    type: {
        default: ''
    },
    items: {
      type: Array,
      default: [
        { value: 1, text: 'One' },
        { value: 2, text: 'Two' },
        { value: 3, text: 'Three' }
      ]
    }
  }
});

При этом вы должны иметь возможность передать правильный опора, например «выбрать», «несколько» или «изображение», чтобы отобразить нужный ввод.

<div id = "app">
  <question type='image'></question>
</div>

Вот рабочий пример, если вы хотите попробовать сами.

Ответ принят как подходящий

Вы можете использовать тип «компонент», а затем во время выполнения установить соответствующий компонент с атрибутом «есть» следующим образом:

<component :is = "componentToRender(type)

В функции вы проверите компонент ведьмы, который хотите вернуть, например:

componentToRender(type){
 case 'quiz1': return 'QuizOneComponent';
// continue like this
}

Прошу прощения за то, что не поставил галочку на этот вопрос

user7847084 11.01.2021 15:26

Другие вопросы по теме