Vue Js - Цикл через v-for X разів (в діапазоні)


112

Як я можу повторити цикл через v-forX (наприклад, 10) разів?

// want to repeat this (e.g.) 10 times

<ul>
  <li v-for="item in shoppingItems">
    {{ item.name }} - {{ item.price }}
  </li>
</ul>

Документація показує:

<ul>
  <li v-for="item in 10">{{ item }}</li>
</ul>

// or 

<li v-for="n in 10">{{ n }} </li>

// this doesn't work

<li v-for="item in 10">{{ item.price }}</li>

але звідки vue знає джерело об’єктів? Якщо я відтворюю це, як сказано в документі, я отримую кількість предметів і предметів, але без вмісту.


На жаль, це не працює, але спасибі
MikeCaine

Чому б вам просто не повторити пункти покупок?
Берт,

1
Hy Bert - я хочу лише знати, як дати v-for (найпростіший спосіб) (x) кількість повторень, і приклад у документі не працює ...... .... в чистому js + ajax його настільки просте повернення <9 або або або, але це не працює в методі ...
MikeCaine

Існує два різних режими v-for; коли його викликають проти цілого числа, а коли викликають проти масиву. Змішування цих режимів та спроба використовувати ціле число для контролю доступу до вмісту масиву, ймовірно, спричинить проблеми. Якщо вам потрібна підмножина масиву, ви можете його відфільтрувати.
Джейсон Аллер

Відповіді:


178

Ви можете використовувати індекс у діапазоні, а потім отримати доступ до масиву через його індекс:

<ul>
  <li v-for="index in 10" :key="index">
    {{ shoppingItems[index].name }} - {{ shoppingItems[index].price }}
  </li>
</ul>

Ви також можете переглянути офіційну документацію для отримання додаткової інформації.


3
Це працює: :) Я трохи змінив його на <li v-for = "(n, index) у 2"> {{shoppingItems.price}} </li> ==== MNY THXXXX Coder ***** ! ====
MikeCaine

1
Як зробити цю 10 змінною ?, сформувати дані компонента?
Альваро

7
Чому це 1-індексовано, мені абсолютно не під силу. <span v-for="i in 5">{{i}} </span>=> 1 2 3 4 5. Використовуйте <span v-for="(e, i) in 5">{{i}} </span>для отримання 0-індексації.
ggorlen

Я помітив, що вам слід писати shoppingItems [індекс -1] .name, щоб перебирати весь масив
peschanko

25

Я вирішив це за допомогою Дова Бенджаміна так:

<ul>
  <li v-for="(n,index) in 2">{{ object.price }}</li>
</ul>

І ще один метод, як для V1.x, так і для 2.x vue.js

Vue 1:

<p v-for="item in items | limitBy 10">{{ item }}</p>

Vue2:

// Via slice method in computed prop

<p v-for="item in filteredItems">{{ item }}</p>

computed: {
   filteredItems: function () {
     return this.items.slice(0, 10)
     }
  }

14

Мені довелося додати, parseInt()щоб сказати v-для того, що він дивився на номер.

<li v-for="n in parseInt(count)" :key="n">{{n}}</li>


12

Ви можете використовувати власний метод зрізу JS:

<div v-for="item in shoppingItems.slice(0,10)">

Метод slice () повертає вибрані елементи в масиві як новий об’єкт масиву.

На основі підказки в керівництві з міграції: https://vuejs.org/v2/guide/migration.html#Replacing-the-limitBy-Filter


Дякую, найкраща відповідь
Solution Spirit


1

У версії 2.2.0+ при використанні v-for з компонентом тепер потрібен ключ .

<div v-for="item in items" :key="item.id">

Джерело

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.