Содержание
1. Пример использования для массива элементов.
2. Пример использования для массива объектов
3. Пример использования для объектов
Следующая задача, которую мы рассмотрим - это задача перебора элементов, которые у нас есть на уровне данных. Т.е. мы будем разбираться с циклом for.
Этот цикл часто используется в разных языках программирования и мы можем его использовать внутри шаблона Vue компонентов. Иметь дело с циклами приходится, пожалуй, также часто, как и с условным рендерингом.
С какими данными мы можем использовать этот цикл for:
1) Массив каких-то элементов
2) Массив объектов
3) Объекты. Мы можем "пробежаться" по ключам какого-то объекта.
Пример использования для массива элементов.
Предположим, у нас есть уровень данных:
data() {
return {
items: ['1','2','3']
}
}
Нам нужно пробежаться по этим элементам и вывести их в template. Цикл for можно организовать с помощью директивы v-for, которая должна быть прикреплена к какому-либо элементу DOM разметки.
<element v-for="item in items">{{ item }}</element>
Здесь items - это массив элементов, которые мы перебираем, а item - это тот конкретный элемент, который в данный момент перебирается.
Если вы используете Eslint в своем проекте, он может выдать ошибку для такого кода:
Element in iteration expect to have "v-bind:key" directives.
Или элемент итерации ожидает наличие директивы "v-bind:key".
Зачем это нужно указывать, мы позже поговорим в отдельном видео. Сейчас же я хотел продемонстрировать простой способ, как можно отойти от этой ошибки. Правда этот способ не устранит саму причину ошибки, но программа, по крайней мере, ошибку выдавать перестанет.
Для этого мы можем с вами преобразовать наш элемент следующим образом и в качестве ключа итерации использовать index элемента
<element v-for="(item, index) in items" :key="index">{{ item }}</element>
index - это просто порядковый номер. От 0 до бесконечности, какой порядковый номер элемента мы с вами будем перебирать.
Если мы посмотрим вывод нашего template, то увидим все наши элементы li с нужными значениями.
Если у вас отключены инструменты проверки кода вроде Eslint, то вы можете вполне обойтись и без атрибута key. Все будет работать до определенных моментов, которые мы рассмотрим позже.
В итоге, наш код может выглядеть следующим образом:
<ul>
<li v-for="item in items">{{ item }}</li>
</ul>
Пример использования для массива объектов
На уровне данных у нас может быть также массив объектов:
data() {
return {
items: [
{ text: "Элемент 1"},
{ text: "Элемент 2"},
{ text: "Элемент 3"},
]
}
}
В этом случае мы можем обращаться к ключам перебираемого объекта следующим образом:
<li v-for="item in items">{{ item.text }}</li>
Другим вариантом получить ключ объекта может быть следующий:
<li v-for="{text} in items">{{ text }}</li>
Пример использования для объектов
Давайте разберем пример из документации, как директива v-for во Vue может обрабатывать объекты.
Предположим, что на уровне данных у нас есть некий объект:
data() {
return {
myObject: {
title: 'How to do lists in Vue',
author: 'Jane Doe',
publishedAt: '2016-04-10'
}
}
}
Когда мы применяем v-for для объектов будет использован специальный Javascript метод, который называется Object.keys(). Этот метод вернет все ключи объекта и по каждому ключу будет пробегаться цикл for.
<li v-for="(value, key, index) in myObject"> {{ index }}. {{ key }}: {{ value }} </li>
Здесь, в отличии от перебора массивов у нас появляется дополнительный второй аргумент key, который выводит ключ объекта.
С помощью такой формы записи мы получим значение, ключи и индекс для перебираемого объекта.
Имейте ввиду, что если у вас есть объект на уровне данных, вы можете свободно перебирать его с помощью директивы v-for.
Vue. v-for с диапазоном данных
Еще один интересный пример, который хотелось разобрать при работе с директивой v-for - это работа с диапазонами данных.
Если нам нужно повторить какое-то действие n-ое количество раз, мы можем это организовать следующим образом:
<div v-for="n in 10" :key="n">{{ n }}</div>
Здесь просто выводятся числа от 1 до 10. Таким образом можно вывести какой-то диапазон данных.
Это полезно тем, что если нам нужно вывести какой-то блок большое количество раз и не прописывать все это в разметке.
Оператор of вместо in
Вместо оператора in можно воспользоваться оператором of.
<li v-for="{text} of items">{{ text }}</li>
У нас все будет работать точно также. Операторы in и of являются синонимами и вы можете использовать тот оператор, который вам больше подходит.
По сути, директива v-for является аналогом Javascript метода forEach. Например,
items.forEach((item, index) => {
// has access to outer scope `parentMessage`
// but `item` and `index` are only available in here
console.log(parentMessage, item.message, index)
})
Мы перебираем все элементы и выполняем какие-то действия.
Вложенность в v-for
Кроме того, мы с вам можем использовать циклы v-for, которые вложены друг в друга. Например,
<li v-for="item in items">
<span v-for="childItem in item.children">
{{ item.message }} {{ childItem }}
</span>
</li>
Имейте ввиду такую возможность, что циклы v-for могут вкладываться друг в друга.
Вот такие основы по работе с директивой v-for, которые я хотел рассказать в этом материале. Жмите Далее, чтобы перейти к следующему материалу.
Чтобы оставить сообщение, зарегистрируйтесь/войдите на сайт через:
Email - зарегистрироваться / войти