Я пытаюсь создать компонент, который создает кнопки фильтров, а затем отправляет атрибут типа в объекте фильтров через шину событий для обработки в другом месте моего приложения. Однако, когда я добавил массив объектов (фильтров) в раздел данных, я получаю сообщение об ошибке this. Фильтр не определяется, когда я нажимаю кнопку.
Я хотел бы сохранить массив фильтров в этом компоненте, потому что я также пытаюсь динамически изменить активный класс на любую нажатую кнопку.
Мне не хватает чего-то, связанного с реквизитами? Почему я не могу отображать кнопки, когда данные и v-for были на другом компоненте? Это были вопросы, которые я задавал себе, чтобы решить эту проблему.
<template>
<div>
<button
v-for="(filter, index) in filters"
:key="index"
:class="{ active: index === activeItem }"
@click="emitFilter(), selectItem(index)"
:filter="filter"
>
{{ filter.name }}
</button>
</div>
</template>
<script>
import EventBus from '@/components/EventBus'
export default {
props: {
filter: { type: String }
},
data() {
return {
activeItem: 0,
filterResult: '',
filters: [
{ name: 'All', type: 'all' },
{ name: 'Holidays', type: 'holiday' },
{ name: 'Seasons', type: 'season' },
{ name: 'Events', type: 'custom' }
]
}
},
methods: {
emitFilter() {
this.filterResult = this.filter
EventBus.$emit('filter-catagories', this.filterResult)
},
selectItem(index) {
this.activeItem = index
}
}
}
</script>
Моя кнопка используется в компоненте фильтров
<template>
<div>
<span>filters</span>
<FilterBtn />
</div>
</div>
</template>
<script>
import FilterBtn from '@/components/FilterBtn'
export default {
components: {
FilterBtn
}
// data() {
// return {
// filters: [
// { name: 'All', type: 'all' },
// { name: 'Holidays', type: 'holiday' },
// { name: 'Seasons', type: 'season' },
// { name: 'Events', type: 'custom' }
// ]
// }
// }
}
</script>
Как видите, прокомментированные Изначально у меня были фильтры, но мне пришлось переместить их в компонент кнопки, чтобы добавить активный класс.