Eu segui os passos igual ao professor, porém o console diz que o método adiciona que eu chamei na classe NegociacaoController está indefinido.
mensagem de erro:
Uncaught TypeError: Cannot read properties of undefined (reading 'adiciona')
at NegociacaoController.adiciona (negociacao-controller.js:11:26)
at HTMLFormElement.<anonymous> (app.js:6:16)
adiciona @ negociacao-controller.js:11
(anonymous) @ app.js:6
Arquivo negociacoes.ts
import { Negociacao } from "./negociacao.js";
export class Negociacoes {
private negociacoes: Array<Negociacao> = [];
adiciona(negociacao: Negociacao) { //Somente é preciso especificar o retorno em métodos que precisam de retorno
this.negociacoes.push(negociacao);
}
lista(): Array<Negociacao> {
return this.negociacoes;
}
}
arquivo 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: Negociacoes;
constructor() {
this.inputData = document.querySelector("#data");
this.inputQuantidade = document.querySelector("#quantidade");
this.inputValor = document.querySelector("#valor");
}
adiciona(): void {
const negociacao = this.criaNegociacao();
//console.log("negociacao", negociacao);
this.negociacoes.adiciona(negociacao);
console.log("Lista de negociacoes: ", this.negociacoes.lista());
this.limparFormulário();
}
criaNegociacao(): Negociacao {
const exp = /-/g; // Expressão regular sempre é iniciada com //, encontra todos os '-' quando colocamos o 'g' ao lado
const date = new Date(this.inputData.value.replace(exp, ","));
const quantidade = parseInt(this.inputQuantidade.value);
const valor = parseFloat(this.inputValor.value);
return new Negociacao(date, quantidade, valor);
}
limparFormulário(): void {
this.inputData.value = "";
this.inputQuantidade.value = "";
this.inputValor.value = "";
this.inputData.focus();
}
}
arquivo app.ts
import { NegociacaoController } from "./controllers/negociacao-controller.js";
const controller = new NegociacaoController();
const form = document.querySelector('.form');
form.addEventListener('submit', event => {
event.preventDefault(); //Não deixa a página atualizar sempre
controller.adiciona();
})