Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

setOption时,如何重新设置(或清除)所有Series #3976

Closed
k8w opened this issue Aug 31, 2016 · 14 comments
Closed

setOption时,如何重新设置(或清除)所有Series #3976

k8w opened this issue Aug 31, 2016 · 14 comments
Labels
stale Inactive for a long time. Will be closed in 7 days.

Comments

@k8w
Copy link

k8w commented Aug 31, 2016

问题简述 (One-line summary)

由于setOption是merge,无法清空现有series

版本及环境 (Version & Environment)

  • ECharts 版本 (ECharts version):3.2.3
  • 浏览器类型和版本 (Browser version):Chrome
  • 操作系统类型和版本 (OS Version):Win7

重现步骤 (Steps to reproduce)

//第一次set
chart.setOption({
  series:[
    { Series1 },
    { Series2 },
    { Series3 }
  ]
})

//第二次set
chart.setOption({
  series:[
    { Series1 }
  ]
})

期望结果 (Expected behaviour)

第二次setOption后,屏幕上只剩一根线了

实际结果

第二次setOption后,屏幕上还有三根线

可能哪里有问题 (What went wrong)

setOption是merge,而非赋值
所以第二次setOption后,实际只更新了series[0],而series[1]和series[2]没有清空

其他信息 (Other comments)

查到setOption支持notMerge为true的方案
但是需要全量更新option,同时先getOption再notMerge也不是很好的方案(会覆盖默认值)

@fzc32
Copy link

fzc32 commented Jan 3, 2017

请问最后是怎样解决的?

@k8w
Copy link
Author

k8w commented Jan 3, 2017

@fzc32 ECharts目前似乎没有好的方案,所以我只能用getOption把已有的option取出来,然后改动需要改动的,然后以notMerge为true的形式set回去。

@fzc32
Copy link

fzc32 commented Jan 3, 2017

谢谢你的及时回答,myChart.setOption(chartOption,true); 第二个参数设置为true解决了此问题。每次切换需要全部重新渲染性能不好。

@k8w
Copy link
Author

k8w commented Jan 3, 2017

@fzc32 是的,我研究了一下ECharts的实现,看到改为Object.assign的形式不是那么容易,所以临时采取了这个办法。

@voidsteed
Copy link

我最近几天也在研究这个问题,我遇到问题的是散点图。散点图setOption的notMerge选项没有用, 所以我在图表存在的情况下, 用getOption取到已经存在的option, 然后用chartInstance.clear(),清空option,最后setOption(option, false, false)。
可能不是最好的方案,但是解决了我的问题

@Ovilia Ovilia added the stale Inactive for a long time. Will be closed in 7 days. label Jul 8, 2019
@stale stale bot closed this as completed Jul 15, 2019
@tanzhi963
Copy link

tanzhi963 commented Nov 18, 2019

我这边是画K线图遇到同样的问题,需要删除一些已经存在的线,我的方法如下,希望帮到有同样问题的人
var tmp = myChart.getOption(); //获取所有当前属性和数据
myChart.clear(); //清空所有属性和数据
tmp.series.splice(1,4); //删除数据中2~5的数据
myChart.setOption(tmp); //删除后的数据重新绘制

@wuyuchang
Copy link

同样用了chart.clear()解决了。

@mstcyj
Copy link

mstcyj commented Dec 24, 2019

我也是用chart.clear() 解决了我的问题。

@pipihua666
Copy link

谢谢你的及时回答,myChart.setOption(chartOption,true); 第二个参数设置为true解决了此问题。每次切换需要全部重新渲染性能不好。

意思是通过name/id去匹配渲染的是局部渲染吗?

@Abbyyan
Copy link

Abbyyan commented Nov 4, 2021

谢谢你的及时回答,myChart.setOption(chartOption,true); 第二个参数设置为true解决了此问题。每次切换需要全部重新渲染性能不好。

用chart.clear之后,之前设置的颜色不知道为啥就没有了。但是这里第二个参数设置为true,完美解决了我的问题

@Corgis
Copy link

Corgis commented Apr 7, 2022

myChart.setOption(chartOption,true); 这个可以用的

@ZhaoPengP
Copy link

使用myChart.clear();然后myChart.setOption()这样对于性能有没有友好一点,或者对于myChart.setOption(chartOption,true);这样的方式提升并没有多少,有没有给出实际的一个数据?

@fakerman1
Copy link

@fzc32 是的,我研究了一下ECharts的实现,看到改为Object.assign的形式不是那么容易,所以临时采取了这个办法。

非常感谢

@shenxiang216
Copy link

image
weishne为什么会这样呢?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
stale Inactive for a long time. Will be closed in 7 days.
Projects
None yet
Development

No branches or pull requests