Vue-множественный выбор запрещает выбор каких-либо элементов при использовании одного выбора (объекта)

#vue.js #vue-multiselect

Вопрос:

Я использую Vue-многозначный выбор 2.1.4

Это работает как заклинание, когда я использую одиночный выбор с параметрами массива. Но в случае использования одного выбора с массивом объектов все элементы являются зелеными и их нельзя выбрать! (У них есть класс «is-selected»)

Чтобы прояснить проблему, я использовал пример кода с веб-сайта проекта и заменил параметры своими данными.

введите описание изображения здесь

 <multiselect v-model="value" deselect-label="Can't remove this value"
    track-by="name" label="name" placeholder="Select one"
    :options="options" :searchable="false" :allow-empty="false">
    <template slot="singleLabel" slot-scope="{ option }">
        <strong>{{ option.name }}</strong> is written in
        <strong>  {{ option.language }}</strong>
    </template>
</multiselect>
 

 const config = {
    data() {
        return {
            value: null,
            options: []
        }
    },
    async mounted() {
        await this.getTerminals();
    },
    methods: {
        async getTerminals() {
            await window.axios.get("/api/Operation/GetTerminals")
                .then(resp => {
                    this.$data.options = resp.data;
                })
                .catch(err => {
                    console.error(err);
                });
            },
    }
};
const app = Vue.createApp(config);
app.component('Multiselect', VueformMultiselect);
app.mount('#app');
 

Ответ №1:

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

         data(){
    return{
     value: null,
     option: {
       value: "",
       name: "",
       icon: "",
     },
     options: [],
    }
    },

methods: {
getData(){
//call your service here
response.data.list.forEach((item, index) => {
            self.option.value = item.first_name   item.last_name;
            self.option.name = item.first_name   " "   item.last_name;
            self.option.icon =
              typeof item.avatar !== "undefined" amp;amp; item.avatar != null
                ? item.avatar
                : this.$assetPath   "images/userpic-placeholder.svg";
            self.options.push({ ...self.option });
          });
}
}
 

Затем в шаблоне заполните параметры следующим образом:

             <Multiselect
                v-model="value"
                deselect-label="Can't remove this value"
                track-by="value"
                label="name"
                :options="options"
                :searchable="false"
                :allow-empty="false"
              >
                <template v-slot:singlelabel="{ value }">
                  <div class="multiselect-single-label">
                    <img class="character-label-icon" :src="value.icon" />
                    {{ value.name }}
                  </div>
                </template>

                <template v-slot:option="{ option }">
                  <img class="character-option-icon" :src="option.icon" />
                  {{ option.name }}
                </template>
              </Multiselect>
 

Вызовите функцию getData() в созданном крюке.