11import {
2+ afterNextRender ,
23 AfterViewInit ,
34 booleanAttribute ,
45 ChangeDetectionStrategy ,
@@ -34,6 +35,8 @@ let nextId = 0;
3435 exportAs : 'cChart' ,
3536 standalone : true ,
3637 changeDetection : ChangeDetectionStrategy . OnPush
38+ // eslint-disable-next-line @angular-eslint/no-host-metadata-property
39+ // host: { ngSkipHydration: 'true' }
3740} )
3841export class ChartjsComponent < TType extends ChartType = ChartType , TData = DefaultDataPoint < TType > , TLabel = unknown > implements AfterViewInit , OnDestroy , OnChanges {
3942
@@ -65,6 +68,7 @@ export class ChartjsComponent<TType extends ChartType = ChartType, TData = Defau
6568 @ViewChild ( 'canvasElement' ) canvasElement ! : ElementRef ;
6669
6770 chart ! : Chart < TType , TData , TLabel > ;
71+ ctx ! : CanvasRenderingContext2D ;
6872
6973 @HostBinding ( 'class' )
7074 get hostClasses ( ) {
@@ -78,7 +82,12 @@ export class ChartjsComponent<TType extends ChartType = ChartType, TData = Defau
7882 private ngZone : NgZone ,
7983 private renderer : Renderer2 ,
8084 private changeDetectorRef : ChangeDetectorRef
81- ) { }
85+ ) {
86+ afterNextRender ( ( ) => {
87+ this . ctx = this . canvasElement ?. nativeElement ?. getContext ( '2d' ) ;
88+ this . chartRender ( ) ;
89+ } ) ;
90+ }
8291
8392 ngAfterViewInit ( ) : void {
8493 this . chartRender ( ) ;
@@ -115,17 +124,15 @@ export class ChartjsComponent<TType extends ChartType = ChartType, TData = Defau
115124 }
116125
117126 public chartRender ( ) {
118- if ( ! this . canvasElement ) {
127+ if ( ! this . canvasElement ?. nativeElement || ! this . ctx ) {
119128 return ;
120129 }
121130
122- const ctx : CanvasRenderingContext2D = this . canvasElement . nativeElement . getContext ( '2d' ) ;
123-
124131 this . ngZone . runOutsideAngular ( ( ) => {
125132 const config = this . chartConfig ( ) ;
126133 if ( config ) {
127134 setTimeout ( ( ) => {
128- this . chart = new Chart ( ctx , config ) ;
135+ this . chart = new Chart ( this . ctx , config ) ;
129136 this . renderer . setStyle ( this . canvasElement . nativeElement , 'display' , 'block' ) ;
130137 this . changeDetectorRef . markForCheck ( ) ;
131138 this . chartRef . emit ( this . chart ) ;
0 commit comments