4
respostas

Não está renderizando o HTML na tela

Por algum motivo a tabela não está renderizando na tela. Segui todos os passos direitinho mas não aparece.

Também não consta nenhum erro no typescript.

Caso alguém possa ajudar, agradeço desde já

Parte do código do arquivo "negociacao-controller.ts":

import { Negociacao } from "../models/negociacao.js";
import { Negociacoes } from "../models/negociacoes.js";
import { NegociacoesView } from "../views/negociacoes-view.js";

export class NegociacaoController {
  private inputData: HTMLInputElement;
  private inputQuantidade: HTMLInputElement;
  private inputValor: HTMLInputElement;
  private negociacoes = new Negociacoes();
  private negociacoesView = new NegociacoesView("#negociacoesView");

  constructor() {
    this.inputData = document.querySelector("#data");
    this.inputQuantidade = document.querySelector("#quantidade");
    this.inputValor = document.querySelector("#valor");
    this.negociacoesView.update();
  }

Código do arquivo:

export class NegociacoesView {
  private elemento: HTMLElement;

  constructor(seletor: string) {
    this.elemento = document.querySelector(seletor);
  }

  template(): string {
    return `
        <table class="table table-hover table-bordered">
            <thead>
                <tr>
                    <th>Data</th>
                    <th>Quantidade</th>
                    <th>Valor</th>
                </tr>
            </thead>
            <tbody>
            </tbody>
        </table>
        `;
  }

  update(): void {
    this.elemento.innerHTML = this.template();
  }
}

Segue print da tela:

Captura de tela da página de Negociações no Browser, sem a tabela.

4 respostas

Bom dia Lucas!

Quando você usa o

this.elemento.innerHTML = this.template();

Este elemento é inicializado no construtor da classe. Você está criando a view assim:

private negociacoesView = new NegociacoesView("#negociacoesView");

Veja se no seu html existe alguma definição da div:

#negociacoesView

Pode ser que você tenha digitado algo diferente, como uma letra minúscula no lugar de maiúscula, ou então faltando alguma letra.

Avalie pela console se não há algum erro. Abra a aba de desenvolvedor e refaça o teste.

Se puder, compartilhe aqui o seu HTML para podermos ajudar.

Bons estudos!

Bom dia, Thiago. Primeiramente, obrigado pela resposta. Eu achei que havia colado o código HTML no problema inicial também, mas aparentemente só copiei e esqueci de colar. Enfim, aí vai:

<body class="container">

    <h1 class="text-center">Negociações</h1>

    <div id="mensagemView"></div>

    <form class="form">

        <div class="form-group">
            <label for="data">Data</label>
            <input type="date" id="data" class="form-control" required autofocus/>        
        </div>    

        <div class="form-group">
            <label for="quantidade">Quantidade</label>
            <input type="number" min="1" step="1" id="quantidade" class="form-control" value="1" required/>
        </div>

        <div class="form-group">
            <label for="valor">Valor</label>
            <input id="valor" type="number" class="form-control"  min="0.01" step="0.01" value="0.0" required />
        </div>

        <button class="btn btn-primary" type="submit">Incluir</button>
    </form>
    <br>
    <br>
    <div id="negociacoesView"></div>
    <script type="module" src="js/app.js"></script>
</body>

Acredito que na nomeação não tenha nenhum erro, porque eu copiei e colei (dessa vez não esqueci) do HTML e joguei no arquivo .ts, mas de qualquer forma, segue aí. Vou rever as aulas de novo pra ver se encontro.

Bom dia!

Chegou a avaliar a console, se não apresentou nenhum erro?

Pelo HTML, está correto.

Coloque no teu código alguns "console.log()". Printe o conteúdo do valor, printe a variável também, para ver se achou a div.

Olá Lucas, no decorrer do curso o professor altera essa classe utilizando herança. Talvez após os ajustes tu encontre o problema. Mas caso não tenha seguido com a aula, verifica se os imports da classe "NegociacoesView" estão corretos, com ".js" no final.

Deveria ficar mais ou menos assim (eu não sei em que ponto da aula você parou):

import { Negociacao } from "../models/negociacao.js";
import { Negociacoes } from "../models/negociacoes.js";
import { View } from "./view.js";

Inclusive fiz uns testes aqui, removendo o ".js" dos imports, e apresentou o mesmo problema que você mencionou, não mostrou o table.

O erro pode ser apenas neste import:

import { View } from "./view.js";

Verifica ai e nos dá um retorno.