Cursos / Eletrônica / Programação Orientada a Objetos / Aula

arrow_back Aula 15 - Projeto Prático - Parte 2

Exibindo a lista de livros no HTML

Atualizado o HTML do formulário


<!DOCTYPE html>
<html lang="en">
<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>Livros</title>

    <style>
        table, th, td{
            border: 1px solid black;
            border-collapse: collapse;
        }

        th,td{
            padding: 5px;
            text-align: left;
        }
    </style>

</head>
<body>
    <h1>CADASTRO DE LIVROS</h1>

    <form class="form">
        <div>
            <label for="titulo">Título:</label><br>
            <input type="text" id="titulo"/>
        </div>

        <div>
            <label for="autor">Autor:</label><br>
            <input type="text" id="autor"/>
        </div>

        <div>
            <label for="aditora">Editora:</label><br>
            <input type="text" id="editora"/>
        </div>

        <div>
            <label for="ano">Ano:</label><br>
            <input type="number" id="ano"/>
        </div>
        <br>

        <button type="submit">Cadastrar</button>
    </form>

    <br>
    <br>

    <!-- Tabela -->
    <div id="livrosview"></div>

    <script src="lib/system.js"></script>
    <script>
        System.defaultJSExtensions = true;
        System.import('js/app.js').catch(err => console.error(err))
    </script>
</body>
</html>

Criando a classe LivrosView


import { Livros } from "../models/livros";

export class LivrosView{

    private _elemento: Element;

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

    public update(modelo: Livros){
        this._elemento.innerHTML = this.templateHTML(modelo);
    }

    public templateHTML(modelo: Livros):string{
        return `

        <table>
            <tr>
                <th>Título</th>
                <th>Autor</th>
                <th>Editora</th>
                <th>Ano</th>
            </tr>

            ${modelo.exibirLivros().map(livro =>{

                return `
                    <tr>
                        <td>${livro.titulo}</td>
                        <td>${livro.autor}</td>
                        <td>${livro.editora}</td>
                        <td>${livro.ano}</td>
                    </tr>
                `
            }).join('')}

        </table>                
        `
    }

}

Atualizando a classe LivroController


import { Livro } from "../models/livro";
import { Livros } from "../models/livros";
import { LivrosView } from "../views/livrosview";

export class LivroController{

    private _inputTitulo: HTMLInputElement;
    private _inputAutor: HTMLInputElement;
    private _inputEditora: HTMLInputElement;
    private _inputAno: HTMLInputElement;

    private _livros: Livros;

    private _livrosView: LivrosView;

    constructor(){
        this._inputTitulo = <HTMLInputElement>document.querySelector('#titulo')
        this._inputAutor = <HTMLInputElement>document.querySelector('#autor')
        this._inputEditora = <HTMLInputElement>document.querySelector('#editora')
        this._inputAno = <HTMLInputElement>document.querySelector('#ano')

        this._livros = new Livros;

        this._livrosView = new LivrosView("#livrosview");
        this._livrosView.update(this._livros);

    }

    public cadastrar(event: Event){

        event.preventDefault()

        let livro = new Livro(
            this._inputTitulo.value,
            this._inputAutor.value,
            this._inputEditora.value,
            parseInt(this._inputAno.value)
        )

        //console.log(livro);

        this._livros.adicionar(livro);

        //this._livros.exibirLivros().forEach(livro => console.log(livro));

        this._livrosView.update(this._livros);

    }

}

Versão 5.3 - Todos os Direitos reservados