Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Não pode ler 'val' de undefined

Na aula 3 dos Decorators, vídeo 7, quando eu insiro os inputs e tento buscar, retorna um erro que não pode ler 'val' da variável data no método adiciona:

Uncaught TypeError: Cannot read property 'val' of undefined at NegociacaoController.adiciona (NegociacaoController.js:33) at HTMLFormElement.dispatch (jquery.min.js:3) at HTMLFormElement.q.handle (jquery.min.js:3)

Meu código está assim:

import { Negociacoes, Negociacao } from '../models/index';
import { NegociacoesView, MensagemView } from '../views/index';
import { domInject } from '../helpers/decorators/index';

export class NegociacaoController {

    @domInject('#data')
    private _inputData: JQuery;

    @domInject('#quantidade')
    private _inputQuantidade: JQuery;

    @domInject('#valor')
    private _inputValor: JQuery;
    private _negociacoes = new Negociacoes;
    private _negociacoesView = new NegociacoesView('#negociacoesView', true);
    private _mensagemView = new MensagemView('#mensagemView', true);

    constructor() {
        this._negociacoesView.update(this._negociacoes);
    }

    adiciona(event: Event){

        event.preventDefault();

        let data = new Date(this._inputData.val().replace(/-/g, ','));

        if(!this._ehDiaUtil(data)) {
            this._mensagemView.update('Somente negociações em dias úteis, por favor!');
            return
        }

        const negociacao = new Negociacao(
            data,
            parseInt(this._inputQuantidade.val()),
            parseFloat(this._inputValor.val())
        );

        this._negociacoes.adiciona(negociacao);

        this._negociacoesView.update(this._negociacoes);
        this._mensagemView.update('Negociação adicionada com sucesso!');

    }

    private _ehDiaUtil(data: Date) {

        return data.getDay() != DiaDaSemana.Sabado && data.getDay() != DiaDaSemana.Domingo;
    }
}

enum DiaDaSemana {

    Domingo,
    Segunda,
    Terca,
    Quarta,
    Quinta,
    Sexta,
    Sabado
}
3 respostas

Fala ai Vinicius, tudo bem? Verifique se os campos foram buscados e encontrados corretamente utilizando o domInject. Tente adicionar alguns console.log:

adiciona() {
    console.log(this._inputData);
    console.log(this._inputQuantidade);
    console.log(this._inputValor);

    // ... restante do código
}

Verifique o que será impresso nesses logs.

Espero ter ajudado.

solução!

Eu tive o mesmo erro, porque esqueci de colocar a exclamação antes de elemento no if do domInject.ts.

const getter = function() {

    if(!elemento) {
        console.log(`buscando ${seletor} para injetar em ${key}`);
                elemento = $(seletor);
    }

    return elemento;
} 

Bruno Becoski Alves, era isso mesmo kkk coloquei a exclamação e funcionou perfeitamente! Muito obrigado pela ajuda!