@ekzotika

Почему не работает computed свойство?

Я пытаюсь сделать кастомный фильтр списка при вводе, используя свойство computed. В одном файле я создаю виджет, в другом я его использую. Вот код из файла создания виджета:

<template>
            <input value="Гарантийный случай"
                           v-model="searchText"
                           :class="{'w-autocomplete__input_completed': completed}"
                           ref="input"
                           @click="areOptionsVisible = !areOptionsVisible"/>

           

            <div v-if="areOptionsVisible"
                 :style="{maxHeight: maxHeight, overflow: 'auto', zIndex: zIndex}"
                 class="w-autocomplete__items">
                <div v-for="option in options" class="w-autocomplete__item_first" >
                    {{ option.name }}

                        <div v-for="item in option.children" class="w-autocomplete__item"
                            :class="{'w-autocomplete__item_active': currentIndex === item}"
                            @mouseenter="setActive(item)"
                             @keyup.up="changeCurrent('up', item)"
                             @keyup.down="changeCurrent('down', item)"
                             @click="doChoose(item)">
                            {{ item.name }}
                        </div>
                </div>
            </div>
</template>

<script>
    export default {
        name: 'dropdown',
        props: {
            placeholder: {
                type: String,
                required: false,
                default: '',
            },
            options: {
                type: Array,
                default(){
                    return []
                }
            },
        },
        data: function () {
            return {
                counter: 0,
                currentIndex: null,
                completed: false,
                chosenItem: null,

                areOptionsVisible: false,

                searchText: '',

                data: [],

            }
        },
        computed: {
            options(){
                return this.props.options.filter(elem => {
                    return elem.name.toLowerCase().includes(this.searchText.toLowerCase());
                });
            },
        },

        .......
    }
</script>


Вот как я передаю массив в этот список в другом файле:

<template>
  ........

  <div class="complaint-form__line-item">
                <div class="form-group">
                    <label>Гарантийный случай</label>
                    <dropdown  :options="options" />
                </div>
             </div>
 ........
</template>



<script>

    ........

    export default {
        name: 'complaint-form',
        components: {LockedImport, UploadFiles, CarNumberInput, Autocomplete, Dropdown},
        props: {
            ......
            }
        },
        data() {
            const complaint = new Complaint();

            return {
                ........

                options: [
                    {name: 'Выход детали из строя в процессе эксплуатации', value: null,
                        children: [{name: 'Увеличение зазора, люфт (дробь/стуки)', value: 53},
                                    {name: 'Обрыв детали', value: 54}]},

                    {name: 'Поломка при установке', value: null},

                    {name: 'Брак до установки', value: null,
                        children: [{name: 'Недокомплект', value: 55},
                                    {name: 'Заводской брак (замятия, отсутствие резьбы, пробой пыльника и т.д.)',
                                        value: 56}]},

                ],

            }
        },


Подскажите пожалуйста, почему computed не работает? Только я добавляю computed и список вообще не отображается при нажатии на поле, но должен. То есть он ломается полностью. Я хочу фильтровать при вводе текста в input
  • Вопрос задан
  • 670 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
Одинаковые имена в props и computed. Переименовывайте.

this.props.options

Откуда вы это взяли? Не надо никакого props, здесь вам не react.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы