Vuejs:为变量赋值时无限循环
Vuejs: endless loop when assigning a value to a variable
我正在制作一个时间线,允许用户对客户做笔记。
我想在属于那个月的笔记组之前显示月份和年份。
例如:
February 2016
"Note 4" - 2016-02-15
"Note 3" - 2016-02-05
January 2016
"Note 2" - 2016-01-28
"Note 1" - 2016-01-12
当我使用 VueJS 来显示我的笔记时,我想测试每个笔记以检查月份是否与保存在名为 "currentMonth" 的变量中的月份不同。
所以我在我的显示器中使用了一个 v-if 来检查一个名为 "isNewMonth" :
的函数的值
<div v-for="note in notes | orderBy 'date' -1" >
<div v-if="isNewMonth(note)"><% currentMonth %></div>
<div style="background-color: #<% note.type.color %>; margin-bottom: 10px; border-left: solid #<% note.type.border_color %> 5px; padding-left: 5px;">
<p class="noteMessage"><% note.message %><p>
<p class="noteInfos">Par <% note.author %> le <% note.date %></p>
</div>
</div>
函数是NewMonth :
isNewMonth: function(note) {
var noteMonth = parseInt(note.date.split("-")[1]);
if(this.currentMonth != noteMonth)
{
this.$set('currentMonth', noteMonth);
return true;
}
else
{
return false;
}
}
"this.$set('currentMonth', noteMonth);" 行有问题。当我添加这一行时,我陷入了无限循环。
每当我删除这一行时,一切都很好(但它总是在每个音符之前显示月份)。
你知道解决我问题的方法吗?
我不确定无限循环,但你不能用当前的方法做到这一点。
currentMonth
是单个变量,vueJs 有两种方式的数据绑定,我的意思是,如果你改变 currentMonth
一次,它将在所有地方改变。并不是说第一个循环会显示一个值,而下一个循环会设置另一个值。
它将始终显示最新值。
相反,您可以执行以下操作:
<div v-for="(note, index) in notes | orderBy 'date' -1" >
<div v-if="hasMonthchanged(note, index)"><% getMonth(note) %></div>
<div style="background-color: #<% note.type.color %>; margin-bottom: 10px; border-left: solid #<% note.type.border_color %> 5px; padding-left: 5px;">
<p class="noteMessage"><% note.message %><p>
<p class="noteInfos">Par <% note.author %> le <% note.date %></p>
</div>
</div>
其中 hasMonthchanged
是 return 月度是否已更改的函数
你可以跟上一个笔记对比一下,月份有没有变化。
我正在制作一个时间线,允许用户对客户做笔记。 我想在属于那个月的笔记组之前显示月份和年份。
例如:
February 2016
"Note 4" - 2016-02-15
"Note 3" - 2016-02-05
January 2016
"Note 2" - 2016-01-28
"Note 1" - 2016-01-12
当我使用 VueJS 来显示我的笔记时,我想测试每个笔记以检查月份是否与保存在名为 "currentMonth" 的变量中的月份不同。 所以我在我的显示器中使用了一个 v-if 来检查一个名为 "isNewMonth" :
的函数的值<div v-for="note in notes | orderBy 'date' -1" >
<div v-if="isNewMonth(note)"><% currentMonth %></div>
<div style="background-color: #<% note.type.color %>; margin-bottom: 10px; border-left: solid #<% note.type.border_color %> 5px; padding-left: 5px;">
<p class="noteMessage"><% note.message %><p>
<p class="noteInfos">Par <% note.author %> le <% note.date %></p>
</div>
</div>
函数是NewMonth :
isNewMonth: function(note) {
var noteMonth = parseInt(note.date.split("-")[1]);
if(this.currentMonth != noteMonth)
{
this.$set('currentMonth', noteMonth);
return true;
}
else
{
return false;
}
}
"this.$set('currentMonth', noteMonth);" 行有问题。当我添加这一行时,我陷入了无限循环。 每当我删除这一行时,一切都很好(但它总是在每个音符之前显示月份)。
你知道解决我问题的方法吗?
我不确定无限循环,但你不能用当前的方法做到这一点。
currentMonth
是单个变量,vueJs 有两种方式的数据绑定,我的意思是,如果你改变 currentMonth
一次,它将在所有地方改变。并不是说第一个循环会显示一个值,而下一个循环会设置另一个值。
它将始终显示最新值。
相反,您可以执行以下操作:
<div v-for="(note, index) in notes | orderBy 'date' -1" >
<div v-if="hasMonthchanged(note, index)"><% getMonth(note) %></div>
<div style="background-color: #<% note.type.color %>; margin-bottom: 10px; border-left: solid #<% note.type.border_color %> 5px; padding-left: 5px;">
<p class="noteMessage"><% note.message %><p>
<p class="noteInfos">Par <% note.author %> le <% note.date %></p>
</div>
</div>
其中 hasMonthchanged
是 return 月度是否已更改的函数
你可以跟上一个笔记对比一下,月份有没有变化。