@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
  • Вопрос задан
  • 692 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
Одинаковые имена в props и computed. Переименовывайте.

this.props.options

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

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

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