1

I have created a chart module using Angular2-highcharts but when I try to run the application I am getting the followoing error.

ERROR Error: Uncaught (in promise): Error: Template parse errors:
Can't bind to 'options' since it isn't a known property of 'chart'. ("

<!-- <p text-center>Kye Info Page under construction</p> -->
  <chart [ERROR ->][options]="chartOptions" type="chart"></chart>
</ion-content>
"): ng:///KeyinfoPageModule/KeyinfoPage.html@27:9
'chart' is not a known element:

1. If 'chart' is an Angular component, then verify that it is part of this module.
2. To allow any element add 'NO_ERRORS_SCHEMA' to the '@NgModule.schemas' of this component. ("
<ion-content>

Code

1. app.module.ts

import { ChartModule } from 'angular2-highcharts';
import * as highcharts from 'Highcharts';

imports: [
---------
ChartModule.forRoot(highcharts)
  ],

2. html File

<ion-content>
  <chart [options]="chartOptions" type="chart"></chart>
</ion-content>

3. .ts file

    export class KeyinfoPage {

      chartOptions:any;
      constructor(public navCtrl: NavController) {
      }

      ionViewDidLoad() {
    this.chartOptions={chart: {
      type: 'area'
  },
  title: {
      text: 'US and USSR nuclear stockpiles'
  },
  subtitle: {
      text: 'Source: <a href="http://thebulletin.metapress.com/content/c4120650912x74k7/fulltext.pdf">' +
          'thebulletin.metapress.com</a>'
  },
  xAxis: {
      allowDecimals: false,
      labels: {
          formatter: function () {
              return this.value; // clean, unformatted number for year
          }
      }
  },
  yAxis: {
      title: {
          text: 'Nuclear weapon states'
      },
      labels: {
          formatter: function () {
              return this.value / 1000 + 'k';
          }
      }
  },
  tooltip: {
      pointFormat: '{series.name} produced <b>{point.y:,.0f}</b><br/>warheads in {point.x}'
  },
  plotOptions: {
      area: {
          pointStart: 1940,
          marker: {
              enabled: false,
              symbol: 'circle',
              radius: 2,
              states: {
                  hover: {
                      enabled: true
                  }
              }
          }
      }
  },
  series: [{
      name: 'USA',
      data: [null, null, null, null, null, 6, 11, 32, 110, 235, 369, 640,
          1005, 1436, 2063, 3057, 4618, 6444, 9822, 15468, 20434, 24126,
          27387, 29459, 31056, 31982, 32040, 31233, 29224, 27342, 26662,
          26956, 27912, 28999, 28965, 27826, 25579, 25722, 24826, 24605,
          24304, 23464, 23708, 24099, 24357, 24237, 24401, 24344, 23586,
          22380, 21004, 17287, 14747, 13076, 12555, 12144, 11009, 10950,
          10871, 10824, 10577, 10527, 10475, 10421, 10358, 10295, 10104]
  }, {
      name: 'USSR/Russia',
      data: [null, null, null, null, null, null, null, null, null, null,
          5, 25, 50, 120, 150, 200, 426, 660, 869, 1060, 1605, 2471, 3322,
          4238, 5221, 6129, 7089, 8339, 9399, 10538, 11643, 13092, 14478,
          15915, 17385, 19055, 21205, 23044, 25393, 27935, 30062, 32049,
          33952, 35804, 37431, 39197, 45000, 43000, 41000, 39000, 37000,
          35000, 33000, 31000, 29000, 27000, 25000, 24000, 23000, 22000,
          21000, 20000, 19000, 18000, 18000, 17000, 16000]
  }]
    }
    console.log('ionViewDidLoad KeyinfoPage');
  }
   viewDashboard(){
      this.navCtrl.setRoot('DashboardPage')
  }

}

Please help me to solve this issue. I have found several questions like this but none of them helped me to solve this error. I am following this video to create the charts

https://www.youtube.com/watch?v=FSg8n5_uaWs&index=2&list=LLTJRcsGtG-ZMAf9dklVIikA&t=610s

keyinfo.module.ts

 import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { KeyinfoPage } from './keyinfo';
import { ChartModule } from 'angular2-highcharts';
import * as highcharts from 'highcharts';

@NgModule({
  declarations: [
    KeyinfoPage,
  ],
  imports: [
    IonicPageModule.forChild(KeyinfoPage),
    ChartModule
  ],
})
export class KeyinfoPageModule {}
Suraj Rao
  • 29,388
  • 11
  • 94
  • 103
Arj 1411
  • 1,395
  • 3
  • 14
  • 36

1 Answers1

4

You can set import the HighChartsModule in the IonicPageModule in which it is used instead of the app.module.ts

import { ChartModule } from 'angular2-highcharts';
import * as highcharts from 'highcharts';

    @NgModule({
      declarations: [
        KeyinfoPage,
      ],
      imports: [
        IonicPageModule.forChild(KeyinfoPage),
        ChartModule.forRoot(highcharts)
      ],
    })
    export class KeyinfoPageModule {}
Suraj Rao
  • 29,388
  • 11
  • 94
  • 103
  • Thank you @SurajRao. This helped me a lot. – Arj 1411 Dec 28 '17 at 09:03
  • This in return causes `TS2339: Property 'forRoot' does not exist on type 'typeof ChartModule'.` for me. For version `6.1.4`. – Nae Nov 18 '20 at 17:54
  • @Nae `angular2-highcharts` is [an old library](https://github.com/gevgeny/angular2-highcharts#readme). Are you using this or a different one... – Suraj Rao Nov 18 '20 at 18:03
  • @SurajRao Sorry, my mistake I tried it with `angular-highcharts` packet. I'm trying to make a webpack built library, angular cli buildable for starters. – Nae Nov 18 '20 at 18:14
  • @SurajRao This does seem to cause `ERROR in Error during template compile of 'AppModule' Function calls are not supported in decorators but 'ChartModule' was called.` in `ng build --prod` though. – Nae Nov 18 '20 at 18:34
  • 1
    @Nae then I suggest you ask a question with your version and code. It won't be possible for anyone to help in the comment section. – Suraj Rao Nov 18 '20 at 18:38