Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use canvas in Angular

The common approaching to use canvas in javascript is like :

var canvas = document.getElementById('tutorial'); var ctx = canvas.getContext('2d'); 

but in Angular2 I cannot get the HTMLCanvasElement object, the var "canvas" only get the HTMLElement in Angular2. So how to use canvas in Angular2? And furthermore, how to use the third-party javascript in Angular2 with the language TypeScript?

like image 599
stephzcj Avatar asked Jun 08 '17 04:06

stephzcj


People also ask

What is the use of canvas?

<canvas> is an HTML element which can be used to draw graphics via scripting (usually JavaScript). This can, for instance, be used to draw graphs, combine photos, or create simple animations.

Can you use CSS with canvas?

Because the canvas is an HTML element, you can use CSS styles to modify its position, assign it a background color or image, add a border, and so on.

Is canvas HTML or CSS?

A canvas is a rectangular area on an HTML page. By default, a canvas has no border and no content.

How does HTML canvas work?

The HTML <canvas> element is used to draw graphics, on the fly, via scripting (usually JavaScript). The <canvas> element is only a container for graphics. You must use a script to actually draw the graphics. Canvas has several methods for drawing paths, boxes, circles, text, and adding images.


1 Answers

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

like image 164
realappie Avatar answered Oct 04 '22 04:10

realappie