echartsInstance.getModel() 与 setOption() 的使用

问题描述 投票:0回答:1

我有一个关于使用

option
setOption()
进行
getModel()
更新的问题。

getModel()
考虑此代码:

const optionSeries = myChart.getModel().option.series[0];
optionSeries.axisLabel.color = "#f00";
myChart.setOption(optionSeries);

还有这个

setOption()
:

myChart.setOption({
  series: [
    {
      axisLabel: "#f00"
    }
  ]
});

myChart.setOption(option);

还有这个

getOption()
:

const option = myChart.getOption();
option.series[0].axisLabel.color = "#f00";
myChart.setOption(option);

根据

getOption()
文档

另外,不推荐以下款式:

var option = myChart.getOption(); 
option.visualMap[0].inRange.color = ...;
myChart.setOption(option);

这是因为 getOption 包含合并值,这些值可能是默认值,并且可能与未来值重叠。所以,我们在更新部分配置时推荐以下风格。

我想知道使用

getModel()
是否与使用
getOption()
一样有害,或者您可以正常使用
setOption
而不受到限制或惩罚吗?

此外,使用

getModel()
是否有任何其他限制,即避免使用它的理由?

javascript echarts
1个回答
0
投票

ECharts#getModel()
Model
类,以及它们下面的任何内容都是未记录的, 因此不应该在用户空间中访问。

您可以查看 echarts 文件的 typescript 类型定义 您在上一篇文章中提到过。你可以看到

Echarts#getModel
(第 2554 行)被标记为
private
,这说明了开发人员的很多信息 echarts 的思考是被用户访问的。

我们通过研究获得有关这些方法和类的信息 源代码并通过检查您的数据结构 代码在控制台中创建。主要问题是 您通过这种方式发现的任何有关“未记录”功能的信息 在 echarts 库的任何未来更新中可能会发生变化,恕不另行通知。 因此,您要么将代码绑定到特定版本的 echarts,要么, 理论上,每当有小更新时,你都必须重复 您的事实收集程序,以确保您的结构 所依赖的代码仍然有效。 至于Model#option

(或

Model#getOption

),理论上它呈现的是
与 
Echarts#getOption
 相同的危险:无法保证选项对象
要完全深度克隆,因此通过分配一个值 deep
在实时选项对象内,您可以更改默认值
属性,不愿意影响当前添加的新系列
图表或其他图表实例。
作为一个非必要的观察,在实践中,我未能创建一个
两者都没有发生这种情况的示例

Echarts#getOption

,也不是Model#option

,甚至不是
visualMap
的例子
您引用的文档中概述的内容不会产生任何结果
不需要的副作用。该系列型号
defaultOptions
有
已加载(请参阅
Series.ts#L264
)
通过
zrender#merge 使用
zrender#clone
, 两者都对对象数组结构执行完全递归深度复制,如下所示 选项是。只有
Date
没有被克隆,但我不知道有什么默认设置
Date
.
 形式的选项
无论如何,警告仍然存在,因为开发人员无意 确保没有混淆,因此设置选项 Echarts#setOption

以及

Model#setOption

 应该更好地使用
新鲜的物体,而不是通过
getOption
方法获得的活的物体。
	

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.