Last updated
Last updated
Принимает: Array | Object | number | string | Iterable
Многократно отрисовывает элемент или блок шаблона, основываясь на переданных данных. Значение директивы должно следовать синтаксису alias in expression
— в alias
будет элемент текущей итерации:
v-for
Директива v-for
используется для отрисовки списка элементов на основе массива данных. У директивы v-for
особый синтаксис записи: item in items
, где items
— исходный массив, а item
— ссылка на текущий элемент массива:
Результат:
Внутри блока v-for
доступны свойства из области видимости родителя. У v-for
также есть второй опциональный параметр с индексом текущего элемента.
Результат:
Вместо in
разделителем можно использовать of
, как в итераторах JavaScript:
v-for
для объектаv-for
можно также использовать для итерирования по свойствам объекта:
Результат:
Можно использовать второй аргумент для получения имени свойства (ключа объекта):
Результат:
И третий — для индексов:
Результат:
При итерировании по объекту порядок обхода такой же как и в Object.keys()
. Его консистентность не гарантируется при использовании различных реализаций движков JavaScript.
v-for
и диапазоныВ v-for
можно передать целое число. В этом случае шаблон будет повторён указанное число раз.
Результат:
v-for
и тег template
Подобно использованию с v-if
, также можно использовать тег <template>
с директивой v-for
для отображения блока из нескольких элементов.
v-for
Можно использовать v-for
на компонентах, как и на обычных элементах:
В версиях 2.2.0+, при использовании v-for на компонентах теперь обязательно требуется указывать key
Однако, в компонент никакие данные не передаются автоматически, поскольку у компонентов изолированные области видимости. Для передачи итерируемых данных в компонент необходимо явно использовать входные параметры:
Причина, почему item
не передаётся в компонент автоматически, в том, что это сделает компонент жёстко связанным с логикой работы v-for
. Но если указывать источник данных явно, компонент можно будет использовать и в других ситуациях.
v-for
и v-if
Не рекомендуется использовать вместе v-if
и v-for
.
Когда присутствуют вместе на одном элементе, v-for
имеет больший приоритет, чем v-if
. Поэтому v-if
будет выполняться для каждой итерации цикла. Это полезно, когда нужно отобразить только некоторые элементы списка, например:
В результате будут отображены только задачи, которые ещё не выполнены.
Если необходимо по условию пропускать выполнение всего цикла, переместите v-if
на внешний элемент (или на <template>
). Например: