Angular 6 e Firebase — Desenvolvendo um portfólio (parte 4)

Kheronn K. Machado
3 min readSep 10, 2018

Finalizando o CRUD

Continuando nosso projeto, vamos criar as funções para salvar e recuperar os projetos.

O resultado final dessa postagem terá o visual e a funcionalidade abaixo:

No final da parte 3 iniciamos a codificação da classe responsável pelo serviço.

Vamos criar os seguintes métodos na Classe src/app/projectservice.service.ts

  1. getAllProjects()
  2. save(project: Project)

3. update(project: Project)

4. delete(project: Project)

project.service.ts

No método para recuperarmos todos os projetos (linhas 15 a 19) ordenamos a lista dos projetos publicado pelo mais recente utilizando o operador orderBy.

Nos métodos seguintes, observa-se que todos tem um parâmetro objeto do tipo Project e um retorno de uma Promise(objeto usado para processamento assíncrono) . Logo, podemos tratar os erros e as mensagens de confirmação no componente que será responsável pela interface.

Na implementação do método save, instanciamos uma data para a propriedade dataPub do projeto (linha 22).

É importante destacar que neste métodos não criamos uma chave personalizada. Assim ao utilizar a função add da coleção, o Firebase gera uma chave. Logo, para recuperarmos esse valor após a execução, recuperamos na promise o id gerado (linha 24) e atualizamos em seguida (linha 25).

Finalizada a implementação do serviço, vamos criar o componente (página…Ok não se resume somente a uma página, mas fica fácil de entender :) ) com a interface necessária para gerenciar os projetos.

No terminal, digite:

$ ng g c gerencia-projeto

Os seguintes arquivos foram gerados:

Esse componente deve ter o formulário e uma lista para exibir os projetos.

Para trabalhar com formulários, vamos importar o módulo ReactiveFormsModule no arquivo app.module.ts (linhas 12 e 29)

app.module.ts

Inicialmente, vamos preparar nosso formulário para inserir e atualizar os campos do projeto.

Nesse trecho, destaco os atributos dos inputs formControlName que serão iniciados na classe. Esse nome deve ser o mesmo do modelo da nossa classe.

Na linha 20 o rótulo do botão está interpolado {{labelButton}}. Optei por trabalhar com o mesmo botão para salvar e atualizar o formulário.

Continuando no template ainda no mesmo arquivo destaque para o trecho responsável pela renderização da tabela.

Na linha 9, utilizamos o *ngFor para iterar sobre um array de projetos utilizando o pipe async.

Na classe responsável pela regra, gerencia-projeto.component.ts, temos os objetos e que utilizaremos logo abaixo da assinatura da classe.

gerencia-projeto.component.ts

Na construtor da classe (linha 12) declaramos o serviço e o formulário. O método ngOnInit() damos a carga inicial dos projetos( linha 17) e definimos algumas configurações iniciais como a inicialização do formulário (linha 15) e o rótulo do botão (linha 16)

No método saveProject (linha 28) verificamos a validade do formulário (na verdade nem seria necessário, já que o botão só é habilitado com o formulário válido) e na linha 34 criamos a condição para decidir se está em modo de inserção ou edição, mudando apenas o método que invocaremos do serviço.

Finalmente vamos alterar o arquivo de rotas para acessar o componente. Insira em app-routing.module.ts

{ path: ‘gerencia-projeto’, component: GerenciaProjetoComponent},

Na próxima postagem, vamos incrementar o formulário, incluindo uma função para realização do upload de imagem do projeto.

Até Mais ++;

Código do projeto no Git

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

Kheronn K. Machado
Kheronn K. Machado

Written by Kheronn K. Machado

Professor, pesquisador e desenvolvedor.

No responses yet

Write a response