Na minha classe negociação-controller.ts no método Adiciona(), ele não adiciona ao atributo, negociações, o Array com os objetos de Negociação. A única maneira que obtive um retorno e que realmente os objetos foram salvos nesse array, foi quando na classe Negociações eu deixei o atributo estático, assim: negociacoes.ts
import { Negociacao } from "./negociacao.js";
export class Negociacoes{
private static negociacoes: Array<Negociacao> = [];
adiciona(negociacao: Negociacao)
{
Negociacoes.negociacoes.push(negociacao);
}
lista(): ReadonlyArray<Negociacao>
{
return [...Negociacoes.negociacoes];
}
}
mas quando é gerado o arquivo .JS percebi que o atributo fica fora da classe, esse tipo de atributo fora da classe pode acabar sendo manipulado, correto ? Com o código antigo eu não consigo um retorno desse Array preenchido, é como se toda vez ele criasse um novo Objeto de Negociações e colocasse lá o Array e retornasse só essa instância, será só eu que estou com esse problema ? .
segue código antigo:
negociacoes.ts
import { Negociacao } from "./negociacao.js";
export class Negociacoes{
private negociacoes: Array<Negociacao> = [];
adiciona(negociacao: Negociacao)
{
this.negociacoes.push(negociacao);
}
lista(): ReadonlyArray<Negociacao>
{
return [...this.negociacoes];
}
}
negociacao-controller.ts:
import { Negociacao } from "../models/negociacao.js";
import { Negociacoes } from "../models/negociacoes.js";
export class NegociacaoController{
private inputData : HTMLInputElement;
private inputQuantidade: HTMLInputElement;
private inputValor : HTMLInputElement;
private negociacoes = new Negociacoes();
constructor(){
this.inputData = document.querySelector('#data');
this.inputQuantidade = document.querySelector('#quantidade');
this.inputValor = document.querySelector('#valor');
}
adiciona(): void
{
const negociacao = this.criaNegociacao();
this.negociacoes.adiciona(negociacao);
// console.log(this.negociacoes.pop());
console.log(this.negociacoes.lista());
this.limparFormulario();
}
criaNegociacao(): Negociacao
{
const exp = /-/g;
const date = new Date(this.inputData.value.replace(exp, ','));
const quantidade = parseInt(this.inputQuantidade.value);
const valor = parseFloat(this.inputValor.value);
return new Negociacao( //retorna um objeto de Negociação
date, //input de data
quantidade, //input de quantidade
valor //input de valor
);
}
limparFormulario(): void
{
this.inputData.value = '';
this.inputQuantidade.value = '1';
this.inputValor.value = '0.0';
this.inputData.focus();
}
}