需求:折线图中数据依据用户勾选的复选框选项显示。
问题:用户新增选项更新正常,取消勾选的参数,依然显示未消失(接口数据正常)
方案1 配置解决
接口数据正常无多余数据,说明应该是Echarts自身的机制,导致产生了类似缓存的效果。查阅文档可以通过setOption()方法的第二个参数notMerge来修复上述数据残留的问题。
notMerge:可选,表示是否合并之前设置的 option,默认为 false,即合并之前的配置项。如果设置为 true,则不合并之前的配置项,直接覆盖。
默认合并数据,将会展示最多的数据,所以会将曾经勾选的参数数据也展示。修复仅仅需要在setOption()中将参数2设置为true。
initChart() {
const lineChart = echarts.init(document.getElementById("lineChart"));
var option = {
xAxis: {
data: this.lineChartxAxis, // 选择的时间区间跨度
boundaryGap: false,
axisTick: {
show: false
}
},
grid: {
left: 10,
right: 10,
bottom: 20,
top: 30,
containLabel: true
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross'
},
padding: [5, 10]
},
yAxis: {
axisTick: {
show: false
}
},
legend: {
data: this.legendProps
},
series: this.formatChartyAxisValue()
}
console.log('init finish')
option && lineChart.setOption(option, true); //参数2设置为true,解决图表不更新的问题
},
formatChartyAxisValue() {
const yAxisValue = this.chartChoosedProp.map((item) => {
console.log(item)
const itemyAxis = {
name: this.findReportProp(item),
smooth: true,
type: 'line',
data: this.lineChartyAxis[item],
animationDuration: 1000,
animationEasing: 'cubicInOut'
}
return itemyAxis
});
console.log('yAxisValue:' + JSON.stringify(yAxisValue))
return yAxisValue
},
在 echarts 中,setOption 方法用于设置图表的配置项和数据,其参数说明如下:
- option:图表的配置项和数据,可参考 echarts 官方文档中的示例进行设置。
- notMerge:可选,表示是否合并之前设置的 option,默认为 false,即合并之前的配置项。如果设置为 true,则不合并之前的配置项,直接覆盖。
- lazyUpdate:可选,表示是否在设置完 option 后立即更新图表,默认为 false。如果设置为 true,则需要手动调用 chart 的 update()方法才能更新图表。
方案2 更新数据之前需要先清空图表
获取Echarts实例后,直接调用myChart.clear()。myChart.clear() 方法的作用是清空当前图表实例中的所有内容,包括所有的系列、图例、提示框等。这个方法可以在需要重新渲染图表时使用,例如在更新数据之前需要先清空图表,然后再重新渲染。此外,myChart.clear() 方法还可以用于释放图表实例占用的内存,从而提高页面性能。
initChart() {
const lineChart = echarts.init(document.getElementById("lineChart"));
lineChart.clear()
……
},