How to use canvas in Angular
You can accomplish this by using @ViewChild
In your class do the following.
import { Component, ViewChild, ElementRef, AfterViewInit } from '@angular/core';
@Component({
name: 'my-component',
// notice the variable name myCanvas
template: `<canvas #myCanvas></canvas>`
})
export class myComponent implements AfterViewInit {
// its important myCanvas matches the variable name in the template
@ViewChild('myCanvas')
myCanvas: ElementRef<HTMLCanvasElement>;
public context: CanvasRenderingContext2D;
ngAfterViewInit(): void {
this.context = this.myCanvas.nativeElement.getContext('2d');
}
}
Try to stay away from using document
as much as you can, as it could bite you on the long run. Also using @ViewChild
has an advantage over querying the DOM, once the application is compiled. Angular already knows ahead of time which element it needs to do the modifications on, rather than having to find it in the DOM.
For a full example check out this demo
Update
For angular 8 you need to use ViewChild
like this.
@ViewChild('myCanvas', {static: false}) myCanvas: ElementRef;
See How should I use the new static option for @ViewChild in Angular 8? for more information
This works for me in Angular 13
@ViewChild('myCanvas')
private myCanvas: ElementRef = {} as ElementRef;
I've tried realappie's solution but it was still showing me an error