Вопрос:

Как импортировать exporting.js и export-data.js, используя angular2-highcharts и компилятор AOT?

javascript highcharts angular2-aot angular2-highcharts

950 просмотра

2 ответа

131 Репутация автора

Я использую angular2-highcharts, и моя диаграмма работает нормально, но мне нужно экспортировать диаграмму в XLS.

Все, что мне нужно для достижения этой цели, это делать

HighchartsExporting(Highcharts);
HighchartsExportData(Highcharts);

где-то в коде, и параметры экспорта будут отображаться на диаграмме.

Проблема заключается в том, как правильно импортировать HighchartsExporting и HighchartsExportData, потому что стандартное решение

@NgModule({
    imports: [
      BrowserModule, 
      ChartModule.forRoot(
        require('highcharts'),
        require('highcharts/modules/exporting')
      ],

не будет работать с AOT, давая мне некоторую «Ошибка при разрешении статических значений символов» во время компиляции.

Я могу заставить его работать, делая

import * as HichartsExporting from 'highcharts/modules/exporting';
import * as HighchartsExportData from 'highcharts/modules/export-data';

как предложено здесь , но это дает мне 2 ошибки:

  • Ошибка TS2497: модуль «xxxx / highcharts / modules / exporting» преобразуется в немодульную сущность и не может быть импортирован с использованием этой конструкции. - JIT сборник
  • Не удается найти модуль 'highcharts / modules / export-data'. - сборник AOT

Я могу обойти это, делая

import HichartsExporting  = require('highcharts/modules/exporting');
import HighchartsExportData = require('highcharts/modules/export-data');

как предложено здесь , но после компиляции AOT я получаю « Uncaught ReferenceError: require is notfined » во время выполнения.

На практике все решения работают нормально, я просто не могу их скомпилировать. Любые предложения приветствуются.

Автор: coconochao Источник Размещён: 08.11.2017 10:21

Ответы (2)


1 плюс

7144 Репутация автора

Вы можете создать экземпляр Highchartsсо всеми загруженными модулями, HighchartsModule(Highcharts)а затем передать экземпляр для forRootработы, как описано в документах angular2-highcharts .

Вы должны быть в состоянии загрузить модули, используя requireили import.

import * as Highcharts from 'highcharts';
require('highcharts/modules/exporting')(Highcharts);

или же

import * as Highcharts from 'highcharts';
import * as HC_exporting from 'highcharts/modules/exporting';
HC_exporting(Highcharts);

и далее так же, как в упомянутых документах:

@NgModule({
    ...
    imports: [
      BrowserModule, 
      ChartModule.forRoot(
-       require('highcharts'),
+       Highcharts
      )
    ],
})
Автор: Kacper Madej Размещён: 10.11.2017 11:10

0 плюса

131 Репутация автора

Решение

На всякий случай, если это кому-нибудь поможет, я не смог бы сделать это с помощью импорта. Вместо этого мне пришлось включить <script src="~/node_modules/highcharts/modules/exporting.js">тег в мой HTML. Так как этот JS является самопризываемой функцией, это все, что нужно для его работы.

Автор: coconochao Размещён: 10.11.2017 02:51
Вопросы из категории :
32x32