VueJS:如何访问 v-repeat 中的上一个项目
VueJS: How to Access the Previous Item in v-repeat
我有一个 table 从 Laravel API 中获取一些 JSON 来填充行。我正在使用 VueJS 和 v-repeat:
<tbody>
<tr v-repeat="entry: entries">
<td>@{{ entry.id }} </td>
<td>@{{ entry.distance }} km</td>
<td>@{{ entry.consumption }} l</td>
<td>@{{ getPrice(entry) + ' €'}}</td>
<td>@{{ getCost(entry) + ' €'}}</td>
<td>@{{ getAverageConsumption(entry) + ' l' }}</td>
<td>@{{ getAverageCost(entry) + ' €' }}</td>
<td>@{{ getCostPerDay(entry) + ' €' }}</td>
<td>@{{ this.getDate(entry) }}</td>
</tr>
</tbody>
现在我想计算 AverageCostPerDay()。问题是,我需要访问迭代中的前一项以比较过去的天数。
如何在 VueJS 中使用 v-repeat 访问以前的项目?我的 getCostPerDay() 方法会是什么样子?
您可以像这样将 $index
变量与 entries
一起使用
<td>@{{ getCostPerDay(entries[$index-1]) + ' €' }}</td>
有关 $index
的更多信息,请查看 Displaying Lists
我通过创建一个向当前索引添加一个点的方法解决了这个问题,如下所示:
getNextItemIndex: function(entry) {
var currentIndex = this.entries.indexOf(entry);
return (currentIndex + 1);
},
getNextItemDate: function(entry) {
var nextDate = moment(this.entries[this.getNextItemIndex(entry)].date);
return nextDate;
},
getTimeDifferenceToNextEntry: function(entry) {
var entryDate = moment(entry.date);
var timeDifference = entryDate.diff(this.getNextItemDate(entry), 'hours') / 24;
return timeDifference.toFixed(3);
},
getCostPerDay: function(entry) {
var costPerDay = this.getCost(entry) / this.getTimeDifferenceToNextEntry(entry);
return costPerDay.toFixed(2);
// console.log(dateDifference);
var priceRatio = entry.price / nextPrice / 1000;
return priceRatio.toFixed(3);
// return previousEntry.price;
}
在 vue.js 的 v2 中,您需要 v-for
这种形式来获取索引:
v-for="(item, index) in items"
然后您可以使用 items[index - 1]
获取之前的值(确保您的函数检查它不是 undefined
)。
<div v-for="grade, i in grades">
<input v-model="grade.name">
<input v-model.number="grade.percent">
<div v-if="i > 0 && grade.percent > grades[i - 1].percent">
Invalid: percent must be lower than previous grade
</div>
</div>
我有一个 table 从 Laravel API 中获取一些 JSON 来填充行。我正在使用 VueJS 和 v-repeat:
<tbody>
<tr v-repeat="entry: entries">
<td>@{{ entry.id }} </td>
<td>@{{ entry.distance }} km</td>
<td>@{{ entry.consumption }} l</td>
<td>@{{ getPrice(entry) + ' €'}}</td>
<td>@{{ getCost(entry) + ' €'}}</td>
<td>@{{ getAverageConsumption(entry) + ' l' }}</td>
<td>@{{ getAverageCost(entry) + ' €' }}</td>
<td>@{{ getCostPerDay(entry) + ' €' }}</td>
<td>@{{ this.getDate(entry) }}</td>
</tr>
</tbody>
现在我想计算 AverageCostPerDay()。问题是,我需要访问迭代中的前一项以比较过去的天数。
如何在 VueJS 中使用 v-repeat 访问以前的项目?我的 getCostPerDay() 方法会是什么样子?
您可以像这样将 $index
变量与 entries
一起使用
<td>@{{ getCostPerDay(entries[$index-1]) + ' €' }}</td>
有关 $index
的更多信息,请查看 Displaying Lists
我通过创建一个向当前索引添加一个点的方法解决了这个问题,如下所示:
getNextItemIndex: function(entry) {
var currentIndex = this.entries.indexOf(entry);
return (currentIndex + 1);
},
getNextItemDate: function(entry) {
var nextDate = moment(this.entries[this.getNextItemIndex(entry)].date);
return nextDate;
},
getTimeDifferenceToNextEntry: function(entry) {
var entryDate = moment(entry.date);
var timeDifference = entryDate.diff(this.getNextItemDate(entry), 'hours') / 24;
return timeDifference.toFixed(3);
},
getCostPerDay: function(entry) {
var costPerDay = this.getCost(entry) / this.getTimeDifferenceToNextEntry(entry);
return costPerDay.toFixed(2);
// console.log(dateDifference);
var priceRatio = entry.price / nextPrice / 1000;
return priceRatio.toFixed(3);
// return previousEntry.price;
}
在 vue.js 的 v2 中,您需要 v-for
这种形式来获取索引:
v-for="(item, index) in items"
然后您可以使用 items[index - 1]
获取之前的值(确保您的函数检查它不是 undefined
)。
<div v-for="grade, i in grades">
<input v-model="grade.name">
<input v-model.number="grade.percent">
<div v-if="i > 0 && grade.percent > grades[i - 1].percent">
Invalid: percent must be lower than previous grade
</div>
</div>