【发布时间】:2018-07-12 13:50:40
【问题描述】:
我有一个对象数组,我想列出当月的标题。并非循环中的每个对象都有标题,如果顺序对象中的月份发生变化,它只会显示标题
因此,例如,对象可能看起来像
data [
{date:'January', info: 'some other data'},
{date:'January', info: 'some other data'},
{date:'February', info: 'some other data'},
{date:'February', info: 'some other data'},
{date:'March', info: 'some other data'},
{date:'March', info: 'some other data'},
];
循环看起来像这样
<div v-for="d in data" :heading="getDate(d.date)" >
{{ heading }}
<p> {{ d.info }}</p>
</div>
showDate 函数位于方法部分
data() {
return {
currentmonth: ""
}
},
methods: {
getDate(date) {
if (date != this.currentmonth) {
this.currentmonth = date
return "<h2>" + date + "</h2>"
} else {
return ""
}
}
所以我只想在循环中对象之间的日期发生变化时显示 H2,所以结果是
<div>
<h2>January<h2>
<p>some other data</p>
</div>
<div>
<p>some other data</p>
</div>
<div>
<h2>February<h2>
<p>some other data</p>
</div>
<div>
<p>some other data</p>
</div>
<div>
<h2>March<h2>
<p>some other data</p>
</div>
<div>
<p>some other data</p>
</div>
但我不断得到的结果是
[Vue warn]: You may have an infinite update loop in a component render function.
显然这是因为我的 getDate 检查了 vm 中的日期,并从同一个函数中更新它。我已经尝试过观察者、计算属性,但无法弄清楚这一点。
【问题讨论】:
-
getDate (index) { if (index === 0 || this.data[index].date !== this.data[index - 1].date) { return this.data[index].date } }