fiz um adaptação do modelo usado o projeto principal para esse questão queria saber o que pode-se melhorado
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Funcionários</title>
<link rel="stylesheet" href="index.css">
</head>
<body>
<form class="form">
<label for="nome">Nome <input type="text" name="nome" id="nome"> </label>
<label for="endereco">Endereço <input type="text" name="endereco" id="endereco"> </label>
<label for="salario">Salário <input type="number" name="salario" id="salario"> </label>
<input type="submit" value="Cadastrar funcionário">
</form>
<div class="tabela"></div>
<script src="/att1/Funcionarios.js"></script>
<script src="/att1/FuncionariosController.js"></script>
<script src="/att1/ListaFuncionarios.js"></script>
<script src="/att1/FuncionariosViews.js"></script>
<script>
let funcionario = new FuncionarioController();
document.querySelector('.form').addEventListener('submit', evento => funcionario.adiciona(evento))
</script>
</body>
</html>
class Funcionarios {
#nome;
#endereco;
#salario;
constructor(nome, endereco, salario){
this.#nome = nome;
this.#endereco = endereco;
this.#salario = salario;
}
get nome(){return this.#nome};
get endereco(){return this.#endereco}
get salario(){return this.#salario}
}
class FuncionarioController {
#inputNome;
#inputEndereco;
#inputSalario;
#form;
#listaFuncionario;
#funcionariosViews;
constructor() {
let $ = document.querySelector.bind(document);
this.#form = $('.form');
this.#inputNome = $('#nome');
this.#inputEndereco = $('#endereco');
this.#inputSalario = $('#salario');
this.#listaFuncionario = new ListaFuncionario();
this.#funcionariosViews = new FuncionarioViews($('.tabela'))
this.#funcionariosViews.update(this.#listaFuncionario)
}
adiciona(evento) {
evento.preventDefault();
this.#listaFuncionario.adiciona(this.#criarFuncionario());
this.#funcionariosViews.update(this.#listaFuncionario)
console.log(this.#listaFuncionario.funcionarios.map(p => p.nome))
console.log(this.#criarFuncionario().nome)
this.#limpaCampo();
}
#criarFuncionario() {
return new Funcionarios(this.#inputNome.value, this.#inputEndereco.value, this.#inputSalario.value);
}
#limpaCampo() {
this.#form.reset();
this.#inputNome.focus();
}
}
class ListaFuncionario{
#listaFuncionarios
constructor(){
this.#listaFuncionarios = [
{
"nome": "Douglas",
"endereco" : "Rua da esquina, 123",
"salario" : "4500"
},
{
"nome": "Felipe",
"endereco" : "Rua da virada, 456",
"salario" : "5000"
},
{
"nome": "Silvio",
"endereco" : "Rua da aresta, 789",
"salario" : "6000"
}
];
}
#adiciona(funcionario){
this.#listaFuncionarios.push(funcionario);
}
adiciona(funcionario){
return this.#adiciona(funcionario);
}
#funcionarios(){
return this.#listaFuncionarios;
}
get funcionarios(){
return this.#funcionarios()
}
}
class FuncionarioViews{
#elemento;
constructor(elemento){
this.#elemento = elemento
}
#template(model){ return `
<table>
<thead>
<tr>
<th>Nome</th>
<th>Endereço</th>
<th>Salário</th>
</tr>
</thead>
<tbody>
${this.#novoFuncionario(model.funcionarios)}
<tbody>
</table>
`}
#update(model){
this.#elemento.innerHTML = this.#template(model)
}
update(model){
return this.#update(model)
}
#novoFuncionario(array){
return array.map(f=>`
<tr>
<td>${f.nome}</td>
<td>${f.endereco}</td>
<td>R$ ${f.salario}</td>
</tr>
`).join(" ")
}
}
table,tr,td{
border: 1px solid black;
}
thead{
background-color: aqua;
text-align: justify;
}
está um pouco misturado para economizar linhas kkk