ng升级两个版本的Highcharts,报错16

ngUpgrade two versions of Highcharts, error 16

我有一个升级的应用程序可以使用 ngUpgrade,目前运行良好,但我 运行 在尝试合并 Highcharts 时遇到了问题。

原始应用包含不同版本的 highcharts(AngularJS 的旧版本)。

使用 Angular 的新(混合记忆)应用程序具有不同版本的 highcharts。

当同时使用它们时,我 运行 出现错误 #16,Highcharts 已经实例化,这是有道理的。

我的问题是,如何避免这种情况?

如果我删除旧的 highcharts,旧的应用程序将不会检测到新的 angular highcharts。如果我删除新的,尝试通过 window 对象访问 highcharts 引用不起作用,因为 highcharts 似乎无法检测新 angular 的模板并且不知道如何使用它。

有没有人在应用程序的两个部分(旧的和新的)上制作一个带有高图表的混合应用程序?

Highcharts 对象保存在 Window 对象的 Highcharts 属性 中。 Highcharts 检查它是否已在此 属性 中定义,如果为真则抛出错误 16。

解法:

您可以尝试在其他 属性 中保存其中一个版本的 Highcharts 并在加载其他版本之前清除 Window.Highcharts:

HTML:

<script src="https://code.highcharts.com/4.2.2/highcharts.src.js"></script>
<script>
  this.HighchartsOld = this.Highcharts;
  this.Highcharts = null;
</script>
<script src="https://code.highcharts.com/highcharts.src.js"></script>

<div id="container1" style='height: 200px'></div>
<div id="container2" style='height: 200px'></div>

JS:

var chart = Highcharts.chart('container1', {
  series: [{
    data: [1, 2]
  }]
});

var chart = HighchartsOld.chart('container2', {
  series: [{
    data: [1, 2]
  }]
});

现场演示: http://jsfiddle.net/BlackLabel/2x7ys9eo/