Для рендеринга коллекций предназначена директива v-for. Она имеет следующий синтаксис:
v-for="item in items"
Где items
представляет массив, а item
псевдоним для текущего перебираемого элемента из массива items.
Например, выведем массив элементов на страницу:
<!DOCTYPE html> <html> <head> <title>Изучаем Vue.js</title> <meta charset="utf-8" /> </head> <body> <div id="app"> <ul> <li v-for="phone in phones">{{phone}}</li> </ul> </div> <script src="https://unpkg.com/vue@2.7.14/dist/vue.js"></script> <script> var app = new Vue({ el: '#app', data: { phones: ['iPhone 7', 'Galaxy S8', 'Nokia N8', 'Xiaomi Mi6'] } }); </script> </body> </html>
Таким образом, для каждого элемента в массиве phones будет создаваться html-элемент <li>
.
Подобным образом можно выводить и более сложные объекты из массива:
<div id="app"> <ul> <li v-for="user in users"><p>Имя: {{user.name}}</p> <p>Возраст: {{user.age}}</p></li> </ul> </div> <script src="https://unpkg.com/vue@2.7.14/dist/vue.js"></script> <script> var app = new Vue({ el: '#app', data: { users: [ {name:'Tom', age:22}, {name:'Bob', age:31}, {name: 'Sam', age:28} ] } }); </script>
При переборе элементов с помощью дополнительного параметра в v-for мы можем получить индекс элемента в массиве, используя следующий синтаксис:
v-for="(element, index) in array"
Где element - это текущий перебираемый элемент в массиве array, а index - индекс этого элемента в массиве.
Например:
<div id="app"> <ul> <li v-for="(phone, index) in phones">{{index + 1}}. {{phone}}</li> </ul> </div> <script src="https://unpkg.com/vue@2.7.14/dist/vue.js"></script> <script> var app = new Vue({ el: '#app', data: { phones: ['iPhone 7', 'Galaxy S8', 'Nokia N8', 'Xiaomi Mi6'] } }); </script>
Подобно тому, как мы перебираем массив, мы можем перебирать и все свойства одного объекта с помощью синтаксиса:
v-for="(value, property) in obj"
Где property - название свойства объекта, а value - его значение.
<div id="app"> <ul> <li v-for="user in users"> <p v-for="(value,key) in user">{{key}} : {{value}}</p> </li> </ul> </div> <script src="https://unpkg.com/vue@2.7.14/dist/vue.js"></script> <script> var app = new Vue({ el: '#app', data: { users: [ {name:'Tom', age:22}, {name:'Bob', age:31}, {name: 'Sam', age:28} ] } }); </script>
Директиву v-for можно применить только к одному html-элементу. Если необходимо, чтобы для каждого объекта из массива создавалось несколько html-элементов, то блок этих элементов следует обертывать элементом template:
<div id="app"> <ul> <template v-for="user in users"> <li>Name: {{user.name}}</li> <li>Age: {{user.age}}</li> </template> </ul> </div> <script src="https://unpkg.com/vue@2.7.14/dist/vue.js"></script> <script> var app = new Vue({ el: '#app', data: { users: [ {name:'Tom', age:22}, {name:'Bob', age:31}, {name: 'Sam', age:28} ] } }); </script>
С помощью v-for можно перебрать все числа от 1 до определенного значения. Например, перебор всех чисел от 1 до 10:
<div> <span v-for="n in 10">{{ n }} </span> </div>