Angular 6 - Not able to add text on canvas dynamically

让人想犯罪 __ 提交于 2020-01-11 12:40:08

问题


I have created canvas element. Once user add some text with the help of keyboard, on click of done button I want to add text on canvas. I did below changes

1. image-home.html

<canvas  (drop)="drop(event)" (dragover)="allowDrop(event)" no-bounce width="400px" height="400" 
      (touchstart)='handleStart($event)' (touchmove)='handleMove($event)' 
      [ngStyle]="{'background': '#fff url(' + selectedImage + ') no-repeat 0 0', 'background-size' : 'contain',
      'background-position': 'center', 'background-size': '400px!important 400px!important'}" #canvas ></canvas>

2. image-home.component.ts

import { Component, ViewChild,  ElementRef} from '@angular/core';

@ViewChild('canvas') public canvas: ElementRef;

sendMessage(userData: string){
    console.log('entered text', userData);
    this.canvasElement = this.canvas.nativeElement;
    let ctx = this.canvasElement.getContext('2d');
    ctx.font = 'italic 18px Arial';
    ctx.textAlign = 'center';
    ctx. textBaseline = 'middle';
    ctx.fillStyle = 'red';  // a color name or by using rgb/rgba/hex values
    ctx.fillText('Hello World!', 150, 50); // text and position
    //this.canvasElement.fillText(userData, 10, 50);
    this.nativeKeyboard.hideMessenger(this.options);
  }

SendMessage function will get call on click of done button of keyboard. I am not getting any error but not able to see text on canvas.


回答1:


In a pure JS implementation your code works fine:

const canvas = document.getElementById('test');
canvas.width = canvas.height = 100;
ctx = canvas.getContext('2d');
ctx.font = 'italic 18px Arial';
ctx.textAlign = 'center';
ctx. textBaseline = 'middle';
ctx.fillStyle = 'red';  
ctx.fillText('Hello!', 50, 50); 
  
<canvas id="test" style="border: 1px solid blue;" ></canvas>

The only issue that I could see is the:
this.canvasElement = this.canvas.nativeElement;
That must not be getting the correct canvas




回答2:


For TypeScript/Angular:

const canvas = <HTMLCanvasElement> document.getElementById('test');
ctx = canvas.getContext('2d');
ctx.font = 'italic 18px Arial';
ctx.textAlign = 'center';
ctx. textBaseline = 'middle';
ctx.fillStyle = 'red';  
ctx.fillText('Hello!', 150, 50); 


来源:https://stackoverflow.com/questions/51612766/angular-6-not-able-to-add-text-on-canvas-dynamically

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!