Canvas图表在Vue中无法正确重绘,数据更新后画面还是旧的怎么办?
我在用Vue做动态图表,每次数据变了就调用drawChart()重绘Canvas,但画布上还是显示老数据,好像没刷新一样。是不是要手动清空画布?
试过在drawChart开头加clearRect,但有时候还是残留旧内容,特别是在快速切换数据的时候。
<template>
<canvas ref="chartCanvas" width="400" height="300"></canvas>
</template>
<script>
export default {
methods: {
drawChart() {
const ctx = this.$refs.chartCanvas.getContext('2d');
// 这里画折线图
ctx.beginPath();
ctx.moveTo(0, 100);
ctx.lineTo(200, 50);
ctx.stroke();
}
},
watch: {
chartData: {
handler() { this.drawChart(); },
deep: true
}
}
}
</script>
再加个style确保canvas尺寸是像素级的:
canvas { width: 100%; height: 100%; }这样应该能解决残留问题了,主要是清除+重绘顺序要注意。记得检查数据变化是不是真的触发了watcher。有时候开发工具里的缓存也会捣乱,刷新下页面试试。
改用 nextTick + clearRect 就搞定: