5

我想在我的 angular2 应用程序中插入实时图表,我正在使用 angular2-highcharts。

npm install angular2-highcharts --save

app.component.ts

import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css'],
})
export class AppComponent {
  title = 'app works!';
  options: Object;
  constructor() {
    this.options = {
      title : { text : 'simple chart' },
      series: [{
        data: [29.9, 71.5, 106.4, 129.2],
      }]
    };
  }

}

app.component.html

<chart [options]="options"></chart>

app.module.ts

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';

import { AppComponent } from './app.component';
import {ChartModule} from "angular2-highcharts";

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    FormsModule,
    HttpModule,ChartModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

运行我的 angular2 应用程序时出现此错误:“HighchartsStatic 没有提供程序!”。提前致谢。

4

5 回答 5

11

我遇到了这个确切的问题。 matthiaskomarek的这个解决方案对我有用:

import { ChartModule } from 'angular2-highcharts';
import { HighchartsStatic } from 'angular2-highcharts/dist/HighchartsService';

declare var require: any;
export function highchartsFactory() {
  return require('highcharts');
}

@NgModule({
  imports: [
      ChartModule
  ],
  declarations: [ AppComponent ],
  exports: [],
  providers: [
    {
      provide: HighchartsStatic,
      useFactory: highchartsFactory
    },
  ],
  bootstrap: [AppComponent]
})
export class AppModule

我不确定为什么这个问题被否决,因为它确实是一个问题。我在这里遇到了完全相同的事情!

目前的 highchart 文档表明这ChartModule.forRoot(require('highcharts')就是所需的全部(当然,填写)文档中缺少的部分)。使用 angular-cli 项目,我永远无法require开始工作,所以declare var require: any;通常可以做到这一点。除了这里,在的上下文中调用它forRoot似乎会导致:

错误中的错误遇到静态解析符号值。对本地(非导出)符号“require”的引用。考虑导出符号(原始 .ts 文件中的位置 18:14),在 ... app/app.module.ts 中解析符号 AppModule

我的猜测是matthiaskomarek的解决方法可以避免这种情况。

于 2017-04-10T01:10:31.107 回答
7

您需要ChartModule.forRoot()在导入中使用:

@NgModule({
  imports: [
    BrowserModule,
    FormsModule,
    ChartModule.forRoot(require('highcharts'))  // <-- HERE
  ],
  // ...
})
export class AppModule { }
于 2017-02-25T13:55:34.780 回答
4

如果 Marc Brazeau 的修复对您不起作用(对我不起作用),另一种解决方法是执行以下操作:

import {ChartModule} from 'angular2-highcharts';
import {HighchartsStatic} from 'angular2-highcharts/dist/HighchartsService';
import * as highcharts from 'highcharts';

@NgModule({
    declarations: [AppComponent],
    imports: [ChartModule],
    providers: [
    {
        provide: HighchartsStatic,
        useValue: highcharts
    }],
    bootstrap: [AppComponent]
})
export class AppModule {
}
于 2017-04-21T15:17:31.293 回答
3
import { ChartModule } from 'angular2-highcharts';
import * as something  from 'highcharts';

@NgModule({
  declarations: [
  AppComponent],
imports: [
  BrowserModule,
  FormsModule,
  HttpModule,
  ChartModule.forRoot(something).ngModule
],
providers: [ChartModule.forRoot(something).providers],
bootstrap: [AppComponent]
})
于 2017-04-07T20:02:38.627 回答
3

终于找到了解决方案,检查我的 app.module 文件:

import { BrowserModule } from '@angular/platform-browser';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { MaterialModule } from '@angular/material';
import 'hammerjs';
import { ChartModule } from 'angular2-highcharts';
import * as highcharts from 'highcharts';
import { HighchartsStatic } from 'angular2-highcharts/dist/HighchartsService';

import { AppRouting } from './app.routing';
import { AppComponent } from './app.component';

declare var require: any;


export function highchartsFactory() {
      const hc = require('highcharts');
      const dd = require('highcharts/modules/drilldown');
      dd(hc);

      return hc;
}

@NgModule({
  declarations: [
    AppComponent,
  ],
  imports: [
    BrowserModule,
    FormsModule,
    HttpModule,
    AppRouting,
    BrowserAnimationsModule,
    MaterialModule,
    ChartModule
  ],
  providers: [{
      provide: HighchartsStatic,
      useFactory: highchartsFactory
    }],
  bootstrap: [AppComponent]
})
export class AppModule { }
于 2017-05-18T11:05:24.153 回答