Flávio, me dê uma ajuda por favor!!
Terminei o curso lógica de programação II, porém estou escrevendo em angular 2. Estou com dúvidas ao carregar o this e seu respectivo contexto. O código do último exercício funcionou em angular 2 mas não ficou bom. Pode me umas dicas?
Obrigado!!! Valeu!!!
import { Component, ElementRef, AfterViewInit, Input, ViewChild } from '@angular/core';
//DECLAREI AS VARIAVEIS de forma GLOBAL PORQUE N CONSEGUI USA-LAS COMO ATRIBUTO DA CLASSE.(erro no this)
let desenha = false;
let corAtual = 'red';
let desenhaArea:any = '';
let selecionaCor:any = '';
let xVermelho = 0;
let xVerde = 50;
let xAzul = 100;
let tamanhoQuadrados = 50;
let yQuadrados = 0;
@Component({
selector: 'desenhopalet',
template: `<canvas #can ></canvas>`
})
export class DesenhoPaletCorComponent {
@ViewChild('can') canvasRef:ElementRef;
private canvas: any;
private ctx:any;
private offsetLeft;
private offsetTop;
@Input('altura') altura: number;
@Input('largura') largura: number;
ngAfterViewInit() {
this.canvas = this.canvasRef.nativeElement;
this.ctx= this.canvas.getContext('2d');
this.canvas.width = this.altura;
this.canvas.height = this.largura;
desenhaArea = this.podeDesenharNaArea.bind(DesenhoPaletCorComponent);
this.desenhaPaletaDeCores(); // desenha a paletraDeCores
this.canvas.onclick = this.selecionaCor;
this.canvas.onmousemove = this.lidaComMovimentoDoMouse;
this.canvas.onmousedown = this.habilitaDesenhar;
this.canvas.onmouseup = this.desabilitaDesenhar;
}
desenhaQuadrado(x,y,tamanho,color){
let tela = this.canvas;
var ctx = tela.getContext('2d');
ctx.fillStyle = color;
ctx.fillRect(x,y,tamanho,tamanho);
ctx.fill();
ctx.fillStroke = 'black';
ctx.strokeRect(x,y,tamanho,tamanho);
}
desenhaCirculo(x, y , raio, cor){
this.ctx.fillStyle = cor;
this.ctx.beginPath();
this.ctx.arc(x,y,raio,0,2*3,14) ;
this.ctx.fill();
}
desenhaPaletaDeCores(){
this.desenhaQuadrado(xVermelho,yQuadrados,tamanhoQuadrados, 'red');
this.desenhaQuadrado(xVerde, yQuadrados, tamanhoQuadrados, 'green');
this.desenhaQuadrado(xAzul, yQuadrados, tamanhoQuadrados, 'blue');
}
lidaComMovimentoDoMouse(evento){
let x = evento.pageX - this.offsetLeft;
let y = evento.pageY - this.offsetTop;
let tela = evento.target;
let ctx = tela.getContext('2d');
// if(desenha && this.podeDesenharNaArea(x,y) ){
// this.desenhaCirculo(x,y,5,corAtual);
// }
//TROQUEI POR ESTE
if(desenha && desenhaArea(x,y) ){
ctx.fillStyle = corAtual;
ctx.beginPath();
ctx.arc(x,y,5,0,2*3,14) ;
ctx.fill();
}
}
habilitaDesenhar(){
desenha = true;
}
desabilitaDesenhar(){
desenha = false;
}
podeDesenharNaArea(x,y){
if(x>0 && x<600 && y>0 && y<80){
return false;
}else{
return true;
}
}
selecionaCor(evento){
let x = evento.pageX - this.offsetLeft;
let y = evento.pageY - this.offsetTop;
if(x > xVermelho && x < xVermelho + tamanhoQuadrados
&& y > yQuadrados && y < tamanhoQuadrados) {
corAtual = 'red';
console.log(corAtual);
} else if(x > xVerde && x < xVerde + tamanhoQuadrados
&& y > yQuadrados && y < tamanhoQuadrados) {
corAtual = 'green';
console.log(corAtual);
} else if(x > xAzul && x < xAzul + tamanhoQuadrados
&& y > yQuadrados && y < tamanhoQuadrados) {
corAtual = 'blue';
console.log(corAtual);
}
}
}