Итак, у меня есть страница Vue, где я зацикливаюсь на нескольких элементах, и у меня есть следующий код:
<div v-if="behavior !== 'selected' && filterItems.length >= 5"></div>
<div v-for="(itemName, index) in filterItems" :key="index">[stuff]</div>
По сути, я перебираю некоторые элементы из API, но я также хочуусловно показать элемент, если есть 5 или более таких элементов, в противном случае я хочу его скрыть.Этот элемент должен существовать вне цикла, но он должен проверить, сколько элементов в цикле.
Интересно, что приведенный выше код работает, но он также выдает консольные ошибки, предположительно, потому что я обращаюсь "filterItems "вне самого цикла.
(вот консольная ошибка: [Vue warn]: Ошибка при рендеринге: «TypeError: Невозможно прочитать свойство 'length' с неопределенным значением»)
Любые идеи о том, как можно избежать появления этих ошибоки выполнить то, что мне нужно, настолько vue-native, насколько это возможно?
В соответствии с просьбой, вот код, объявляющий filterItems
.Это просто объект, объявленный как массив:
props: {
filterItems: Array,
behavior: String,
},
Он передается из родительского компонента в виде массива.
ОБНОВЛЕНИЕ: ВОЗМОЖНОЕ РЕШЕНИЕ?
Так что я не знаю, является ли это лучшим способом сделать это или нет, но я смог получить желаемый результат, выполнив следующее.Я хотел бы услышать отзывы о том, если это удовлетворительное решение:
Я добавил значение данных:
data() {
return {
displaySearch: false,
};
},
Затем добавил:
updated() {
if (this.behavior !== 'selected' && this.filterItems.length >= 5) {
this.displaySearch = true;
}
},
Затем побежалпроверка нового логического значения: v-if="displaySearch"
Я думаю, что проверка запускается против displaySearch
после отображения страницы и избегает ошибки TypeError.Я попытался установить его, и он сразу сломался.
Окончательное решение Смотрите ответ Стивена Томаса ниже.Я остановился на этом, так как мне кажется, что это самый простой и элегантный ответ.