Визуализация условного списка Vue

#vue.js #for-loop #conditional-statements #conditional-rendering

Вопрос:

Я работаю над многоуровневым элементом навигации, в котором у меня есть цикл v-for для фильтров в массиве. Фильтры, такие как цвет, размер, пол и т.д…

Поскольку количество опций в некоторых фильтрах может быть довольно большим (например,цвет), я хотел бы добавить кнопку, чтобы показать больше опций для каждого фильтра.

В настоящее время у меня есть следующая функция, чтобы показать больше опций для каждого фильтра

              <div v-if="showMoreFilters === false">
              <div
                v-for="(attribute, index) in filter.attributes"
                :key="attribute.index">
                  <div class="layered-navigation__item"
                    v-if="index < filter.facetsettings.nrofshownattributes"
                  >
                    <SfFilter
                      :label="attribute.title"
                      :count="attribute.nrofresults"
                      :selected="attribute.isselected"
                      @change="function(x)>
                    </SfFilter>
                  </div>
              </div>
            </div>
            <div v-else>
              <div
                v-for="attribute in filter.attributes"
                :key="attribute.index"
              >
                <div class="layered-navigation__item">
                    <SfFilter
                      :label="attribute.title"
                      :count="attribute.nrofresults"
                      :selected="attribute.isselected"
                      @change="function(x)">
                    </SfFilter>
                  </div>
                </div>
              </div>
            </div>
            <sfButton @click="showMoreFilters = !showMoreFilters">
                Show more filters"
            </sfButton>
 

Желаемое начальное количество опций фильтра для каждого фильтра задается в каждом фильтре:

 filter.facetsettings.nrofshownattributes
 

Проблема, однако, в том, что, если я нажму кнопку (showMoreFilters), все фильтры отобразят все свои параметры. Не только массив опций фильтра, на который я нажал. Как я мог бы решить эту проблему?

Ответ №1:

Проблема в том, что существует много фильтров, но только один флаг showMoreFilters. Рассмотрите возможность добавления showMore свойства к facetsettings объекту каждого фильтра…

 <div v-if="!filter.facetsettings.showMore">
...
<sfButton @click="filter.facetsettings.showMore != filter.facetsettings.showMore">
  Show more of just this filter"
</sfButton>