1
1
import {
2
+ afterNextRender ,
2
3
AfterViewInit ,
3
4
booleanAttribute ,
4
5
ChangeDetectionStrategy ,
@@ -34,6 +35,8 @@ let nextId = 0;
34
35
exportAs : 'cChart' ,
35
36
standalone : true ,
36
37
changeDetection : ChangeDetectionStrategy . OnPush
38
+ // eslint-disable-next-line @angular-eslint/no-host-metadata-property
39
+ // host: { ngSkipHydration: 'true' }
37
40
} )
38
41
export class ChartjsComponent < TType extends ChartType = ChartType , TData = DefaultDataPoint < TType > , TLabel = unknown > implements AfterViewInit , OnDestroy , OnChanges {
39
42
@@ -65,6 +68,7 @@ export class ChartjsComponent<TType extends ChartType = ChartType, TData = Defau
65
68
@ViewChild ( 'canvasElement' ) canvasElement ! : ElementRef ;
66
69
67
70
chart ! : Chart < TType , TData , TLabel > ;
71
+ ctx ! : CanvasRenderingContext2D ;
68
72
69
73
@HostBinding ( 'class' )
70
74
get hostClasses ( ) {
@@ -78,7 +82,12 @@ export class ChartjsComponent<TType extends ChartType = ChartType, TData = Defau
78
82
private ngZone : NgZone ,
79
83
private renderer : Renderer2 ,
80
84
private changeDetectorRef : ChangeDetectorRef
81
- ) { }
85
+ ) {
86
+ afterNextRender ( ( ) => {
87
+ this . ctx = this . canvasElement ?. nativeElement ?. getContext ( '2d' ) ;
88
+ this . chartRender ( ) ;
89
+ } ) ;
90
+ }
82
91
83
92
ngAfterViewInit ( ) : void {
84
93
this . chartRender ( ) ;
@@ -115,17 +124,15 @@ export class ChartjsComponent<TType extends ChartType = ChartType, TData = Defau
115
124
}
116
125
117
126
public chartRender ( ) {
118
- if ( ! this . canvasElement ) {
127
+ if ( ! this . canvasElement ?. nativeElement || ! this . ctx ) {
119
128
return ;
120
129
}
121
130
122
- const ctx : CanvasRenderingContext2D = this . canvasElement . nativeElement . getContext ( '2d' ) ;
123
-
124
131
this . ngZone . runOutsideAngular ( ( ) => {
125
132
const config = this . chartConfig ( ) ;
126
133
if ( config ) {
127
134
setTimeout ( ( ) => {
128
- this . chart = new Chart ( ctx , config ) ;
135
+ this . chart = new Chart ( this . ctx , config ) ;
129
136
this . renderer . setStyle ( this . canvasElement . nativeElement , 'display' , 'block' ) ;
130
137
this . changeDetectorRef . markForCheck ( ) ;
131
138
this . chartRef . emit ( this . chart ) ;
0 commit comments