Есть такой компонент select
<template>
<div>
<div class="vue-dropdown" :class="{'vue-active':toggle}">
<span @click="toggle = !toggle">{{ value.length ? value : defaultValue }}</span>
<div class="vue-dropdown-collapsed" v-if="this.toggle">
<input type="text" v-model="search" v-if="showSearch === 'true'" :placeholder="inputPlaceholder" @click="toggle == true">
<ul>
<li v-for="(option, index) in options" :key="index" @click="toggle = false, value = option.name, selectedItem(option)" v-if="option.name.toLowerCase().indexOf(search.toLowerCase()) !== -1">{{ option.name }}</li>
</ul>
</div>
</div>
</div>
</template>
И есть такой компонент для формы
<template>
<div>
<div v-for="(field, index) in formFields" :key="index">
<dropdown :id="field.id" @open="fetchDropdownData(field.id)" v-else-if="field.type == 'select'" :options="dropdownsData[field.id]" default-value="Make a choice" show-search="false" input-placeholder="Выберите"></dropdown>
</div>
</div>
</template>
Форма генерируется из JSON'а
formFields: [
{
name: 'my_field',
class: 'moi_class',
type: 'input',
component: 'ui_input',
id: 1
},
{
name: 'brand',
class: 'moi_class',
type: 'select',
component: 'dropdown',
id: 2
},
{
name: 'model',
class: 'moi_class',
type: 'select',
component: 'dropdown',
id: 3
},
{
name: 'brand',
class: 'moi_class',
type: 'select',
component: 'dropdown',
id: 4
},
{
name: 'model',
class: 'moi_class',
type: 'select',
component: 'dropdown',
id: 5
},
{
name: 'brand',
class: 'moi_class',
type: 'select',
component: 'dropdown',
id: 6
},
{
name: 'model',
class: 'moi_class',
type: 'select',
component: 'dropdown',
id: 7
},
{
name: 'brand',
class: 'moi_class',
type: 'select',
component: 'dropdown',
id: 8
},
{
name: 'model',
class: 'moi_class',
type: 'select',
component: 'dropdown',
id: 9
}
]
Так пытаюсь загружать данные в select
fetchDropdownData(id) {
const currentDropdownData = axios.get('../../../static/json/v1/auto.json').then(response => {
this.dropdownsData.push(response.data);
}).catch(e => {
console.log(e)
})
console.log(this.dropdownsData)
}
Теперь о проблемах:
1) в
this.dropdownsData
падают массивы объектов;
в
:options="dropdownsData[field.id]"
мы выбираем по id
Но ведь индекс в массиве не всегда будет равен этому id, как быть в данной ситуации?
2) например будет два селекта, 1 - марки автомобиля, 2 - модели.
сам json будет выглядеть примерно так
{
"id": 17,
"name": "BMW",
"value": "BMW",
"models": [
"i3",
"i8",
"M3",
"M4",
"M5",
"M6",
"X1",
"X3",
"X4",
"X5",
"X6"
]
}
так вот второй селект не должен работать, пока не выбран 1 селект, и во 2 селект передавать массив = значению первого селекта;