@Sashjkeee
f-e

Зависимость нескольких select-ов?

Здравствуйте, подскажите пожалуйста
Есть такой кастомный 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>

<script>
    import axios from 'axios';

    export default {
        props: [
            "options",
            "defaultValue",
            "showSearch",
            "inputPlaceholder"
        ],
        data() {
            return {
                toggle: false,
                selectedItem: '',
                value: "",
                search: ""
            };
        },
        watch: {
            toggle: function (val) {
                if(val) {
                    this.$emit('open');
                    
                } else {
                    this.search = '';
                }
            },
            selectedItem: function(val) {
                this.$emit('selectedItem', val)
            }
        },
        methods: {}
    }
</script>


Есть примерно такой JSON от сервера
formFields: [
    {
        name: 'brand',
        type: 'select',
        active: true,
        fields: [
            {
                id: 0,
                name: 'audi',
                value: 'audi'
            },
            {
                id: 1,
                name: 'bmw',
                value: 'bmw'
            },
            {
                id: 2,
                name: 'feat',
                value: 'feat'
            },
            {
                id: 3,
                name: 'shkoda',
                value: 'shkoda'
            },
            {
                id: 4,
                name: 'MB',
                value: 'MB'
            },
            {
                id: 5,
                name: 'seat',
                value: 'seat'
            },
            {
                id: 6,
                name: 'mazda',
                value: 'mazda'
            },
        ]
    },
    {
        name: 'model',
        type: 'select',
        depend: ["brand"],
        active: false,
        fields: []
    },
    {
        name: 'country',
        type: 'select',
        depend: ["brand"],
        active: false,
        fields: []
    },
    {
        name: 'country',
        type: 'input',
        depend: ["brand"],
        active: false,
        fields: []
    }
]


По этому JSON-у должна генерироваться форма.
Вот я генерирую форму
<div v-for="(field, index) in formFields" :key="index"> 
    <ui_input v-if="field.type == 'input'" v-model="input" @change="change($event)"></ui_input>
    <dropdown :id="field.id" @selectedItem="selected($event)" v-else-if="field.type == 'select'" :options="field.fields" default-value="Make a choice" show-search="true" input-placeholder="Выберите"></dropdown>
</div>


Вот вывожу в консоль данные
methods: {
    selected(val) {
        axios.get('../../../static/json/v1/models/' + val.id + '.json').then(response => {
            console.log(response.data)
        }).catch(e => {
            console.log(e)
        })
    }
},


В консоль выводится объект, который мы выбрали, теперь у меня есть два вопроса:
1) каким образом сделать зависимость? То есть select model не должен быть активен пока select brand не выбран
2) как в select model передать данные, которые выводятся в консоль после выбора объекта?

При том, нужно учитывать , что п.1 и п.2 должны работать для всех объектов у которых есть свойство depend
  • Вопрос задан
  • 1231 просмотр
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
каким образом сделать зависимость? То есть select model не должен быть активен пока select brand не выбран

Например, так. Добавляете в объекты, на основе которых создаются элементы управления, свойство value, передаёте его в v-model соответствующего элемента (надо будет реализовать v-model для вашего dropdown'а). Делаете computed свойство formData на основе этих value. И задаёте элементам v-if - если элемент имеет зависимость, то пока соответствующее поле в formData не заполнено, элемент не создаётся (или disabled реализовываете - с аналогичной логикой).

как в select model передать данные, которые выводятся в консоль после выбора объекта?

Ну, НАВЕРНОЕ, вместо вывода в консоль эти данные куда-то сохранить надо - и передавать оттуда в соответствующий dropdown.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы