3
respostas

INCLUSÃO DEFINITIVA DAS INFORMAÇÕES APÓS F5

Baseado nos módulos do curso eu consegui desenvolver um site de consulta de medicamentos para utilizar na minha empresa e acredito que ficou bem alinhado. Todas as funções apresentadas no curso foram replicadas com sucesso como por exemplo inclusão de novas informações e o filtro seletivo.

Contudo, quando eu faço a inclusão de novos medicamentos na tabela e der um F5 os novos dados não ficam gravados (Cria-se a tr com as td mas depois de atualizar o site elas somem. Como eu posso corrigir isso para fazer com que as novas informações adicionadas possam permanecer na tela?

Eu fiz o módulo 4 Eventos, Formulários e Criando Elementos várias vezes e não vi ou passou despercebido essa função. Alguém pode me ajudar?

Outra dúvida, agora eu quero disponibilizar o acesso a esse site a todos os outros vendedores da minha empresa. Qual curso eu aprendo a fazer isso?

Obrigado,


var marcas = document.querySelectorAll(".marca");
console.log(marcas);

//array 
for( var i = 0; i < marcas.length; i++){
    console.log(marcas[i]);
}

//esucta o click do botaoAdicionar pela id e recarrega a pagina
var botaoAdicionar = document.querySelector("#adicionar-medicamento");
botaoAdicionar.addEventListener("click", function(){
event.preventDefault();

//trazer o form do mundo html para js
//selecionei o form com os inputs dele
//acesso as variáveis do input pelo name
var form = document.querySelector("#form-adiciona");

var marca = obtemPacienteDoFormulario(form)

var marcaTr = montaTr(marca);


//vou criar uma marca que é uma tr passando o nome da tag
//criou a variável tabela para incluir a tr criada anteriormente e add paciente na tabela
var tabela = document.querySelector("#tabela-marca");
tabela.appendChild(marcaTr);
form.reset();
});


//medicamento, linha e repcontato são itens comuns ao objeto marca (propriedades do objeto), busco do form pelo name e value.
function obtemPacienteDoFormulario(form){

    var marca = {

        medicamento: form.medicamento.value, 
        linha: form.linha.value,
        repcontato: form.repcontato.value

    }

    return marca 

}

function montaTr(marca){
    var marcaTr = document.createElement("tr");
    marcaTr.classList.add("marca");

    marcaTr.appendChild(montaTd(marca.medicamento, "info-nomedamarca"));
    marcaTr.appendChild(montaTd(marca.linha, "info-nomedalinha"));
    marcaTr.appendChild(montaTd(marca.repcontato, "info-repcontato"));

    return marcaTr
}

function montaTd(dado, classe){
var td = document.createElement("td");
td.textContent = dado;
td.classList.add(classe)

return td;
}
3 respostas

Fala ai Wilson, tudo bem? Isso acontece porque páginas você está incluindo os dados no HTML da página atual e os mesmos não estão sendos salvos para que você busque eles quando a tela recarregar.

Para manter os dados, falando apenas de Web, você pode utilizar o LocalStorage ou o IndexedDB, ambos são opções para armazenamento offline de informações no navegador.

No seu caso eu recomendaria o IndexedDB, acho que faz mais sentido e temos um curso sobre o mesmo na Alura: https://cursos.alura.com.br/course/javascript-es6-orientacao-a-objetos-parte-3

Além do curso, tem um vídeo no meu canal falando sobre isso: https://www.youtube.com/watch?v=LtceWnRVrDQ

Outra maneira e mais recomendável é que seu front consuma e salve dados de uma API.

Mas dai precisa de um back-end e tals, algo mais complexo no momento.

Espero ter ajudado.

Ok, obrigado. E como eu faço para lançar esse site vamos dizer assim? Qual curso eu tenho que fazer para aprender a publicar o meu site e deixar ele acessível aos usuários? como é uma tabela fixa que muda pouco a alteração via HTML não é inviável. O que eu preciso mesmo que funcione é o botão de filtro onde o representante vai digitar o nome do medicamento e receber a informação da linha e o contato do vendedor responsável. Esse botão está funcionando bem.

Eu pensei que esse formulário de inclusão que o módulo oferece fosse para incluir dados em definitivo já que ele cria uma tr e as td's com o mesmo formato do HTML.

Fala Wilson, bom, depende muito, no caso para fazer todo controle no front teria esse curso que te mandei sobre IndexedDB.

Agora falando em publicação, isso vai mudar de contexto para contexto, mas, falando sobre o seu cenário onde precisa publicar um site estático, eu recomendaria a Netlify:

https://www.netlify.com/

No canal do Willian Justen tem um curso bem completo sobre a plataforma: https://www.youtube.com/watch?v=a1cIjP1bueM&list=PLlAbYrWSYTiMGMxQf9JSoZUU1rgVpGPth

Espero ter ajudado.