Vue Не работает компонент фильтра флажка - PullRequest
1 голос
/ 16 июня 2020

В одном файловом компоненте я создал массив флажков:

    <label 
      v-for="(category, index) in categories" 
      :key="index"
     >
      <input type="checkbox" :value="category.value"
      @change="emitSearchValue">
      <span class="ml-2 text-gray-700 capitalize">{{ category.value }}</span>
    </label>

С помощью EventBus я передаю данные в компонент List:

methods: {
    emitSearchValue() {
      EventBus.$emit('checked-value', 'this.checkedCategories')
    }
  }

В компоненте List я слушаю EventBus:

created() {
 EventBus.$on('checked-value', (checkedCategories) => {
  this.checkedvalue = checkedCategories;
 })
}

Тогда мое вычисленное свойство будет выглядеть так:

computed: {
 filteredData() {

   return this.blogs.filter(blog =>
   // if there are no checkboxes checked. all values will pass otherwise the category must be included
    !this.checkedCategories.length || this.checkedCategories.includes(blog.category)
   )
  }
},

В консоли я получаю:

[Vue warn]: Error in render: "TypeError: Cannot read property 'length' of undefined"

Вот ссылка на песочница .

Что здесь не так?

1 Ответ

0 голосов
/ 17 июня 2020

Измените вычисляемую опору filteredData на:

computed: {
    filteredData() {
      if(!this.checkedvalue.length) return this.experiences

      return this.experiences.filter(experience =>
        this.checkedvalue.includes(experience.category)
      );
    }
}
...