Как я могу загрузить реактивные данные в многовыборный компонент?

#vue.js #vuejs3

Вопрос:

Я пытаюсь использовать эту библиотеку https://github.com/vueform/multiselect , но всякий раз, когда я пытаюсь загрузить извлеченные данные, там ничего не отображается, но, например, когда я это делаю {{ testData }} , я вижу значение в html. Кто-нибудь может посоветовать мне, как я могу это исправить?

Работает: <Multiselect :options="['test']" />

Не работает:

 <Multiselect :options="testData" />
 

в моей настройке()

   const testData = computed(() => {
      return [
        {
          name: "Test"
        }
      ]
    })

return { testData }
 

Ответ №1:

Исходя из вышесказанного, я предполагаю, что это должен быть массив, так что попробуйте следующее

  const testData = computed(() => {
      return [{ name: "Test"}]
    })

return { testData }
 

и добавьте следующие изменения в шаблон

 <Multiselect :options="testData" track-by="name" label="name"/>
 

Изменено по запросу:

Если вы хотите показать весь объект целиком, вы можете следовать приведенному ниже примеру

  const testData = computed(() => {
      return [
        { name: 'Vue.js', id: 'vue' },
        { name: 'Angular', id: 'angular' }
      ]
 })

return { testData }
 

и добавьте метод, вызываемый nameWithId с нижеприведенным содержимым.
Примечание: я дал его на основе синтаксиса Vue2, пожалуйста, измените синтаксис, соответствующий Vue3

 nameWithId({ name, id }) {
      return `${name} — [${id}]`
    }
 

затем с приведенными ниже изменениями в вашем шаблоне

 <Multiselect v-model="selectedValue" :options="testData" :custom-label="nameWithId" placeholder="Select one" label="name" track-by="name"/>
 

Справочный документ: https://vue-multiselect.js.org/#sub-getting-started

Комментарии:

1. Возможно, вы знаете, если я передам объект, у которого также есть поле id, и я его v-моделирую, в моем html он отображает только имя, могу ли я каким-то образом заставить его отображать все значение объекта?

2. Да, вы можете это сделать, пожалуйста, проверьте дополнительные детали, добавленные в ответ