Olá
Após a implementação do domInject.ts, meu código começo a dar o seguinte erro, e deixou de adicionar na listagem:
Buscando elemento #data do DOM para injetar em _inputData!
NegociacaoController.js:33 Uncaught TypeError: Cannot read property 'toString' of undefined
at NegociacaoController.adiciona (NegociacaoController.js:33)
at HTMLFormElement.dispatch (jquery.min.js:3)
at HTMLFormElement.q.handle (jquery.min.js:3)
NegociacaoController.ts
import { logarTempoDeExecucao } from '../helpers/decorators/logarTempoDeExecucao'
import { NegociacoesView, MensagemView } from '../views/index';
//import { MensagemView } from '../views/MensagemView';
import { Negociacoes, Negociacao } from '../models/index';
//import { Negociacao } from '../models/Negociacao';
import { domInject } from '../helpers/decorators/index';
export class NegociacaoController {
//private _inputData: HTMLInputElement;
@domInject('#data')
private _inputData: JQuery;
//private _inputQuantidade: HTMLInputElement;
@domInject('#quantidade')
private _inputQuantidade: JQuery;
//private _inputValor: HTMLInputElement;
@domInject('#valor')
private _inputValor: JQuery;
private _negociacoes: Negociacoes = new Negociacoes;
private _negociacoesView = new NegociacoesView('#negociacoesView');
private _mensagemView = new MensagemView('#mensagemView');
constructor() {
this._negociacoesView.update(this._negociacoes);
}
//@logarTempoDeExecucao()
adiciona (event: Event){
event.preventDefault();
//O ERRO OCORRE NA LINHA ABAIXO
let data = new Date(this._inputData.val().toString().replace(/-/g, '/'));
if (!this._ehDiaUtil(data)) {
this._mensagemView.update('As negociações são permitidas apenas em dias úteis!');
return;
}
const negociacao = new Negociacao(
data,
parseInt(this._inputQuantidade.val().toString()),
parseFloat(this._inputValor.val().toString())
);
this._negociacoes.adiciona(negociacao);
this._negociacoesView.update(this._negociacoes);
this._mensagemView.update('Negociação adicionada com sucesso!');
/*this._negociacoes.paraArray().length = 0; //Apaga array! Solução na linha 12 de Negociacoes.ts
this._negociacoes.paraArray().forEach(negociacao => {
console.log(negociacao.data);
console.log(negociacao.quantidade);
console.log(negociacao.valor);
console.log(negociacao.volume);
})*/
}
private _ehDiaUtil(data: Date) {
return data.getDay() != DiaDaSemana.Sabado && data.getDay() != DiaDaSemana.Domingo;
};
}
enum DiaDaSemana {
Domingo,
Segunda,
Terca,
Quarta,
Quinta,
Sexta,
Sabado
}
domInject.ts
export function domInject (seletor: string) {
return function (target: any, key: string) {
let elemento : JQuery;
const getter = function() {
if (!elemento) {
console.log(`Buscando elemento ${seletor} do DOM para injetar em ${key}! `);
elemento = $(elemento);
}
return elemento;
}
Object.defineProperty(target, key, {
get: getter
});
}
}
Por favor, se alguém puder me ajudar agradeço!
EDUARDO