destroy () вызывается в бросках ngOnDestroy Невозможно прочитать свойство 'forExport' из неопределенного - PullRequest
0 голосов
/ 06 мая 2019

У меня есть приложение Highcharts в Angular7.

Когда я пытаюсь уничтожить круговую диаграмму, вызывая destroy () в ngOnDestroy, она выдает Uncaught TypeError: Невозможно прочитать свойство 'forExport' из undefined в a.Chart.destroy (highcharts.js: 293)

Package.json

    "@angular/core": "7.2.12",
    "highcharts": "7.1.1",
    "highcharts-angular": "2.4.0",

HTML

<highcharts-chart
  [Highcharts]="Highcharts"
  [options]="chartOptions"
  [update]="false"
  [runOutsideAngular]="true"
  style="width: 300px; height: 280px; display: block;"
></highcharts-chart>

Машинопись

export class MyChartComponent implements OnInit, AfterViewInit, OnDestroy {

  public Highcharts = Highcharts; // required
  private chartRef;

  public chartOptions = {
    chart: {
      plotBackgroundColor: null,
      plotBorderWidth: null,
      plotShadow: false,
      type: 'pie',
      events: this.getHighchartsEvents()
    },
    // [...]
  }

  private getHighchartsEvents() {
    const self = this;
    return {
      load: function(event) {
        self.chartRef = this;
      }
    }
  }

  ngOnDestroy(): void {
    if(this.chartRef) {
      this.zone.runOutsideAngular(() => {
        this.chartRef.destroy();
        // Uncaught TypeError: Cannot read property 'forExport' of undefined
        // at a.Chart.destroy (highcharts.js:293)
      });
    }
  }

Пример песочницы: https://codesandbox.io/s/4r4zm77lm4

Если диаграмма уничтожается кнопкой do Destroy (которая находится внутри компонента с диаграммой), она работает нормально.

Когда диаграмма уничтожается путем удаления компонента посредством установки chartVisible в false (by 'Кнопка «Скрыть»), затем выполняется ngOnDestroy, который .destroy () выдает ошибку.

Пожалуйста, сообщите.Заранее спасибо.

1 Ответ

0 голосов
/ 07 мая 2019

Эта ошибка возникает из-за того, что highcharts-angular обертка уничтожает сам график.Проверьте здесь: https://github.com/highcharts/highcharts-angular/blob/master/highcharts-angular/src/lib/highcharts-chart.component.ts#L62-L67

Итак, вы пытаетесь уничтожить его после его уничтожения.

Код оболочки с уничтожением:

  ngOnDestroy() { // #44
    if (this.chart) {  // #56
      this.chart.destroy();
      this.chart = null;
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...