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.