Echarts数据更新但图表未同步的问题

文章讲述了如何在Echarts中解决用户勾选复选框后折线图数据更新问题,提出两种方案:一是通过setOption的notMerge参数覆盖旧配置;二是更新数据前先清空图表实例。
摘要由CSDN通过智能技术生成

需求:折线图中数据依据用户勾选的复选框选项显示。

问题:用户新增选项更新正常,取消勾选的参数,依然显示未消失(接口数据正常)

方案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()
  ……
},

  • 12
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ECharts 是一个强大的 JavaScript 数据可视化库,用于创建各种交互式图表。在使用 ECharts 更新数据时,有时可能会遇到图表区域空白的问题,这通常是由于更新操作没有正确地应用到当前的数据上。以下是一些可能导致空白区域的原因和解决方法: 1. **数据更新不及时**:确保在调用 `setOption` 方法更新数据之前,新数据已经准备好并格式正确。 2. **清除旧数据**:使用 `clear` 方法或 `dispose` 方法清理旧的数据项,然后重新设置新的数据,避免数据混合导致空白。 3. **使用 `silent: true`**:在 `setOption` 时设置 `silent: true` 可能会避免图表瞬时更新的闪动,但需确保在所有更新完成后显式设置 `silent: false` 来触发更新。 4. **动画或过渡设置**:如果设置了动画效果,确保更新数据和启用动画是同步的。如果数据更新太快,动画可能无法跟上。 5. **系列对象的配置**:确保每个图表系列(如 `series` 数组中的对象)都有对应的数据,并且它们的长度与数据集匹配。 ```javascript // 示例代码片段 let chart = ...; // ECharts 实例 let newData = ...; // 新的数据对象 chart.setOption({ series: [ { data: newData, ... }, // 更新第一个系列的数据 { data: newData, ... }, // 更新第二个系列的数据 ... ], silent: true, // 避免立即更新 }); // 延迟更新完成后再设置 silent 为 false setTimeout(() => { chart.setOption({ silent: false }); }, 0); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值