Highcharts-Angular는 Highcharts를 Angular에서 사용하기 쉽도록 작성된 library 입니다.
이 글에서는 Highcharts와 Highcharts-Angular를 설치하는 방법을 알아보고,
Highchart-Angular에서 제공하는 기본 Input에 대하여 정리하겠습니다.
Highcharts는 사실 다른 library를 추가로 설치하지 않아도 Angular 환경에서 충분히 사용할 수 있습니다.
예를 들어 Angular에서 다음과 같이 작성하면 highcharts-angular의 도움 없이도 충분히 사용이 가능합니다.
<div id="chart-line"></div>
import * as Highcharts from 'highcharts';
export class HighchartsComponent implements OnInit {
chart: any;
ngOnInit(): void {
this.chart = Highcharts.chart({
chart: {
renderTo: 'chart-line',
},
series: [{
data: [1, 2, 3],
type: 'line'
}],
} as any)
}
}
당연한 말이겠지만 highcarts-angular를 사용하기 위해서는 반드시 highcharts를 install 해야 합니다.
또한 standalone 기준으로 사용하고자 하는 component에서 highcharts-angular module을 반드시 import 해야 합니다.
npm i highcharts
npm i highcharts-anguilar
import { Component } from '@angular/core';
import { HighchartsChartModule } from 'highcharts-angular';
@Component({
selector: 'app-your-chart-component',
standalone: true,
imports: [
HighchartsChartModule // Import the module here
],
template: `<!-- Your highcharts-chart component will go here -->`
})
export class YourChartComponent {
// Component logic
}
highcharts-angular에서 제공하는 기본 옵션은 다음과 같습니다.
<highcharts-chart
[Highcharts]="Highcharts"
[constructorType]="chartConstructor"
[options]="chartOptions"
[callbackFunction]="chartCallback"
[(update)]="updateFlag"
[oneToOne]="oneToOneFlag"
[runOutsideAngular]="runOutsideAngularFlag">
</highcharts-chart>
Attribute를 살펴 보면 다음과 같습니다.
highcharts: typeof Highcharts // required, highcharts 변수를 전달해야 합니다.chartConstructor: string = 'chart'; // optional, chart의 종류를 정의 합니다. 가능한 옵션은 'chart', 'stockChart', 'mapChart', 'ganttChart' 입니다.chartOptions: Highcharts.Options = { ... }; // required, 차트를 구성하는 값을 전달해야 합니다.chartCallback: Highcharts.ChartCallbackFunction = function (chart) { ... } // optional, 생성된 차트의 callback 함수입니다.updateFlag: boolean = false; // optional, chart 생성 후 조작할 때 update를 true로 주면 강제로 trigger 할 수 있습니다. true 값은 trigger가 적용되면 false로 변경됩니다.oneToOneFlag: boolean = true; // optional, seires, xAxis, yAxis를 추가 또는 제거할 때 사용합니다. update와는 다르게 기존 값을 입력된 값으로 교체하지 않고, 주입된 값을 기존 값에 추가 또는 제거하는 방식으로 적용합니다.runOutsideAngular: boolean = false; // optional, 강제로 not trigger 됩니다. 이후 updateFlag를 통해 한꺼번에 trigger를 시도하면 좋은 효율을 가질 수 있습니다. 위에서 required로 전달할 값을 정의하는 법을 알아보고, highcharts를 import 하는 방법을 알아봅시다.
highcharts는 별도의 d.ts를 제공하지 않으므로 declare된 모든 값을 import 해야 합니다.
import * as Highcharts from 'highcharts';
...
export class HighchartsComponent {
Highcharts = Highcharts;
chartConstructor = 'chart';
chartOptions = {
series: [{
data: [1, 2, 3],
type: 'line'
}]
};
chartCallback;
updateFlag = false;
oneToOneFlag = false;
runOutsideAngularFlag = false;
}
highcharts는 추가 모듈을 제공하는데 이를 typescript 또는 angular 에서 import하려면 일반적이지 않은 방법을 적용해야 합니다. 해당 module을 import한 뒤 import한 모듈에 정의한 chart 변수를 주입해야 합니다.
Plugin도 방식은 동일합니다.
import HC_exporting from 'highcharts/modules/exporting';
HC_exporting(Highcharts);
ssr에서는 highchart가 로드되기 전에 호출되는 것을 방지하기 위해 chart 변수에 값이 정의되기 전에 화면에 노출되지 않도록 ngIf를 추가해야 합니다.
그렇지 않으면 아직 값이 적용되지 않은 변수를 highcharts-angular에 주입을 시도하므로 에러가 발생합니다.
<highcharts-chart
*ngIf="Highcharts"
[Highcharts]="Highcharts"
[constructorType]="chartConstructor"
[options]="chartOptions"
[callbackFunction]="chartCallback"
[(update)]="updateFlag"
[oneToOne]="oneToOneFlag"
[runOutsideAngular]="runOutsideAngularFlag">
</highcharts-chart>