【问题标题】:highcharts-angular : Cannot read property 'chart' of undefinedhighcharts-angular:无法读取未定义的属性“图表”
【发布时间】:2018-12-14 15:46:51
【问题描述】:

我正在尝试实现 highcharts-angular (https://github.com/highcharts/highcharts-angular) 在我的应用程序中出现以下错误

Cannot read property 'chart' of undefined
at HighchartsChartComponent.updateOrCreateChart (highcharts-chart.component.ts:35)

我想使用 bellcurve 模块,但无法正常工作。

我尝试使用 stackblitz 重现我的问题

请看https://stackblitz.com/edit/angular-unf7pz

不知道是什么问题

【问题讨论】:

  • Stackblitz 网址对我不起作用。但正如我在文档中看到的那样,他们提到用法为highcharts-chart 而不仅仅是chart
  • 抱歉链接错误。这是正确的stackblitz.com/edit/angular-xgx6up
  • 当我进行推荐的更改时,我收到错误无法绑定到“选项”,因为它不是“highcharts-chart”的已知属性。
  • 用正确的网址更新了帖子
  • 您是否也更新了代码。因为我没有看到代码有任何变化。我还在控制台中看到了一些其他错误,例如require is not a function

标签: angular highcharts


【解决方案1】:

通过使用https://github.com/highcharts/highcharts-angular


这很容易遵循,但是从您的 stackblitz 中,有一些您没有遵循的说明:

1/ 在shared/Highcharts/bellcurve/bellcurve-chart.component 你需要绑定Highcharts: html:

<highcharts-chart 
  [Highcharts]="Highcharts" --> ITS REQUIRED
  [options]="options"       --> ITS REQUIRED

ts:

import * as Highcharts from 'highcharts';
...
export class BellCurveChartComponent implements OnInit {
    Highcharts = Highcharts;
    options = {title: ..., xAxis: ...};
    ...
}

阅读https://github.com/highcharts/highcharts-angular#general-prerequisites

2/您需要按照https://github.com/highcharts/highcharts-angular#to-load-a-module中的步骤加载您要使用的正确模块(钟形曲线)

import bc from 'highcharts/modules/histogram-bellcurve.js';
bc(Highcharts);

3/如果要使用图表实例,使用回调函数callbackFunction

HTML:

 [callbackFunction]="getInstance.bind(this)"

TS:

 getInstance(chart): void {
    // chart instance
    this.chart = chart;
 }

也就是说,在这里检查工作代码:

https://stackblitz.com/edit/angular-k85q94

【讨论】:

  • 我并不感到困惑,因为我知道有两个角度包装器。我们之前使用的是 angular2-highcharts,但现在尝试使用 highcharts-angular highcharts 作为官方版本,并得到 highcharts 团队的支持。此外,我们使用 angular2-highcharts 实现了各种图表,但无法让钟形曲线工作。展开项目的文件夹结构,可以看到钟形图组件。我正在尝试渲染该组件。我想你没有看到链接stackblitz.com/edit/angular-unf7pz。此链接使用最新的包装器
  • @Tom 您应该在您的主题中解释这一点,我在 cmets 中看到了您的旧堆栈闪电战,这就是我关注的原因。我用工作代码更新了我的答案,你错过了一些说明
  • 非常感谢您的帮助。我错过了你提到的那些重要步骤。在我说这次迁移成功之前,我需要最后的帮助。目前,数据是在 highchart 模板中设置的。当我删除它以通过组件提供它时,它不起作用。我提供的系列是相同的,但我注意到模板 (load)="getInstance($event.context) 中的这个声明没有被设置。我在使用 angular2highchart 包装器时设置了这个。是加载对吗?还是不一样。我在文档中找不到
  • 请注意,为了让您尝试,您必须取消注释 getInstance(chartInstance) 和 ngOnChanges 方法中的代码。 ngOnchanges 触发,但我没有看到 getinstance 触发。
  • @Tom 阅读文档,可以使用回调函数 [callbackFunction]="getInstance.bind(this)" ,只需添加 bind(this) 因为函数中的默认 this 指向图表。 github.com/highcharts/highcharts-angular#options-details(第 4 部分)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-20
  • 2020-09-16
  • 2017-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多