@MSAFT

Как отфильтровать результаты v-for на полученное через select options значение в VueJS?

Пишу что-то вроде фильтра товаров по значениям, по типу как в интернет магазинах фильтруют товары.

Есть такой Select:
<select @click="handleBrand" class="custom-select">
      <option v-for="brand in brands.sort()" :data-foo="brand">{{ brand }}</option>
    </select>


Вывожу в фильтр только уникальные значения, без повторений:
computed:   {
      brands() {
        return [...new Set(this.profiles.map(n => n.brand.name))];
      }, }


Получаю выбранное пользователем значение с помощью:
methods: {

      handleBrand(e) {
        if(e.target.options.selectedIndex > -1) {
          console.log(e.target.options[e.target.options.selectedIndex].dataset.foo)
        }
      }, 
}

Проверял через console.log, далее не знаю в какую сторону двигаться просто.

Через handleBrand получаю выбранное значение, например: Brand1.

Ниже все результаты полученные через v-for:
<div v-for="profile in profiles" class="row feed">
---SOME CODE---
        <span>Бренды: {{profile.brand.name}}</span>      
---SOME CODE---
    </div>

Результат примерно следующий:
Brand1
Brand1
Brand2
Brand3

handleBrand условно получил значение Brand1, как прописать, чтоб цикл v-for="profile in profiles" ниже показал только бренды со значением Brand1?

Сам массив profiles приходит через axios из Laravel.
  • Вопрос задан
  • 445 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
Добавляете в компонент свойство brand. И используете его в качестве значения для своего select'а, а метод handleBrand вырезаете:

<select v-model="brand" class="custom-select">

Делаете ещё одно вычисляемое свойство - отфильтрованные элементы из profiles, чей brand.name равен brand:

filteredProfiles() {
  return this.profiles.filter(n => n.brand.name === this.brand);
},

Ну и выводите эти отфильтрованные элементы:

<div v-for="profile in filteredProfiles" class="row feed">
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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