javascript - Vue watch中的代码改变了被监视的数据,导致死循环
问题描述
目前我有一个按钮,它只是更改chartData 中的一个属性。我还有一个手表可以监视任何更改(包括嵌套更改),如果有任何更改,它会呈现一个新图表。然后新图表集的新渲染this.chartObject = new Chart
我相信它会再次触发 Vue 手表并开始无限循环。
有什么办法可以避免这种情况?
更改数据的按钮:
<button @click='addChartData()'>Add Data</button>
数据:
data: function() {
return {
chartData: {
labels: ['Red', 'Red', 'Red', 'Red', 'Red', 'Red'],
datasets: [{
data: [11, 10, 9, 8, 7, 6],
label: 'My First dataset'
}]
},
chartObject: null
}
}
方法
methods: {
renderChart(chartData, chartOptions){
var ctx = document.getElementById('myChart').getContext('2d');
this.chartObject = new Chart(ctx, {
type: 'bar',
data: chartData,
options: chartOptions
});
},
addChartData(){
this.$set(this.chartData, 'labels', ['Red', 'Blue'])
console.log(this.chartData)
}
},
最后是手表:
watch: {
'chartData.labels': function(newValue, oldValue){
this.chartObject.destroy()
this.renderChart(this.chartData, this.chartOptions)
console.log('Changed')
},
}
解决方案
推荐阅读
- python - 烧瓶套接字 io 不工作(Windows 7 和 10)anaconda 和 python 3.7
- c# - 在不同机器上使用 MSBuild.exe 构建时的差异
- php - 当我使用移动功能php添加登录时无法登录
- c# - SSIS的脚本任务中可以省略Dts.TaskResult吗
- ios - 在 ios swift voicememo 应用程序中重新录制音频
- python - 调试 python 云堆栈模块中可能存在的错误的 ansible 跟踪
- javascript - 使 jquery datepicker 每年在相同的日期日期使用不同的颜色
- java - VisualVM - 我如何连接?
- azure - 天蓝色架构混合解决方案
- django - django.db.utils.IntegrityError: 1062, 运行 Django 迁移时键的重复条目