Desenvolvimento

31 jul, 2017

Simples aplicação real time com angular 4 e firebase – Parte 03

Publicidade

Nessa parte iremos fazer a ligação dos dados do Angular com o Firebase.

AGORA SIM, VAMOS INTEGRAR TUDO E VER A MÁGICA ACONTECER

Na primeira parte criamos uma lista que é alimentada no método form_submit, dessa vez iremos enviar esses dados diretamente ao Firebase e de lá iremos listar no template html. Vamos nós? Para deixar tudo bem declarado iremos criar um componente para o form e outro para a listagem dos dados. Mas antes dos componentes vamos criar um módulo específico para o cadastro-pessoa, ele irá definir o escopo dos componentes criados na pasta, mantendo a hirarquia, mais tarde podemos falar mais sobre esse conceito. Para criar o componente vá ao terminal, dentro da pasta da aplicação e digite o comando:

ng g m cadastro-pessoa

Para criar os novos componentes vá ao terminal, dentro da pasta da aplicação e digite os seguintes comandos.

ng g c cadastro-pessoa/cadastro-pessoa-form
ng g c cadastro-pessoa/cadastro-pessoa-lista

<a href="https://static.imasters.com.br/wp-content/uploads/2017/07/2-4.png"><img class="aligncenter size-large wp-image-118271" src="https://static.imasters.com.br/wp-content/uploads/2017/07/2-4-620x422.png" alt="" width="620" height="422" />
</a>

Se você notar, os novos componentes foram importados e declarados dentro do módulo cadastro-pessoa, respeitando a hierarquia que queremos seguir. Isso é feito de forma automática pelo angular cli. Sempre depois de uma modificação como essas eu novamente inicio o servidor para saber se está tudo bem, em muito momentos nos focamos em codar e esquecemos de verificar possíveis bugs com um simples “ng serve”. Então, vamos ver se está tudo ok.

ng serve

<a href="https://static.imasters.com.br/wp-content/uploads/2017/07/3-3.png"><img class="aligncenter size-large wp-image-118272" src="https://static.imasters.com.br/wp-content/uploads/2017/07/3-3-620x264.png" alt="" width="620" height="264" /></a>

Agora vamos colocar os novos componentes dentro do template HTML do cadastro-pessoa

Essa parte é um tanto chata, vou tentar explicar de forma simples. Ao criarmos o módulo dentro de cadastro-pessoa, precisamos trocar as referências dos componentes para esse módulo e retirá-las de app.module para que fiquem somente no cadastro-pessoa.module.

Para simplificar vamos mudar primeiramente ao app.module.ts que deve ficar como na imagem abaixo, apenas com o import CadastroPessoaModule.

Vamos continuar com o template html do cadastro-pessoa-form. Copiei tudo que havia no template cadastro-pessoa para ele e ficou como na imagem abaixo.

Vamos fazer o mesmo que fizemos com o código do cadastro-pessoa.component.ts para o cadastro-pessoa-form.component.ts. Deverá ficar como na imagem abaixo.

Com isso pronto, vamos limpar o cadastro-pessoa.component.ts.

Vamos revisar o código do cadastro-pessoa.module, algumas diferenças se fazem presentes, e acho necessário mostrar para um melhor entendimento

Repare que dentro do modulo existem os imports de cada component da pasta cadastro-pessoa. O import de FormsModule, exports dos components e as declarations dos mesmos.

Como eu disse, essa parte é bem chatinha, se por acaso você achou confusa demais, me avise e faça as críticas que julgar necessárias que juntas melhoraremos o entendimento. ?

Bom, até eu me perdi agora, deixa eu ver aonde estou, perai…

Ah sim, vamos colocar o component cadastro-pessoa-form dentro do template html do cadastro-pessoa, ficará como na imagem abaixo.

Feito isso, vamos novamente ver se está tudo ok, lembre-se que até agora apenas modificamos o local do códigos que já escrevemos, apenas por uma questão didática, pois como eu disse, essa parte é chatinha, e precisa estar bem fixada para continuarmos. Vamos lá, ng serve!!

ng serve

<a href="https://static.imasters.com.br/wp-content/uploads/2017/07/11-1.png"><img class="aligncenter size-large wp-image-118282" src="https://static.imasters.com.br/wp-content/uploads/2017/07/11-1-620x229.png" alt="" width="620" height="229" /></a>

Agora vamos retirar a listagem do cadastro-pessoa-form algo simples assim

E assim

Agora limpe cadastro-pessoa-form.ts que tínhamos da lista

E colocamos a lista no cadastro-pessoa.component.html

Como resultado, nada mais funcionará =D. Caso tenha parado o serviço, rode novamente ng serve e veja como ficou.

É agora que vamos colocar o firebase para funcionar. Primeiramente vamos declarar o provider do AngularFireDatabase no arquivo cadastro-pessoa.module.ts.

import { AngularFireDatabase } from 'angularfire2/database';

e

<br /> providers:[AngularFireDatabase]

Agora dentro de cadastro-pessoa-form.component.ts vamos colocar os seguinte códigos

import { AngularFireDatabase } from ‘angularfire2/database’;

Vamos também injetar a depência do AngularFireDatabase.

constructor( private angularFire: AngularFireDatabase) { }

Vamos modificar o método form_submit para gravar os dados na base.

form_submit(f: NgForm) {
this.angularFire.list("pessoas").push(
{
nome: f.controls.nome.value,
sobrenome: f.controls.sobrenome.value
}
).then((t: any) => console.log('dados gravados: ' + t.key)),
(e: any) => console.log(e.message);
f.controls.nome.setValue('');
f.controls.sobrenome.setValue('');
}

Deve ficar igual a imagem abaixo.

Agora apenas mais um detalhe, precisamos liberar a leitura e escrita na base de dados, para isso vá até o console do firebase, em regras da base de dados. HTTPS://CONSOLE.FIREBASE.GOOGLE.COM/U/0/PROJECT/SIMPLESAPPREALTIME/DATABASE/RULES E sete as regras para true.

Se tudo deu certo e se não quebrou ao rodar o servidor, podemos fazer um teste para saber se está gravando na base de dados \0/ Vou gravar um vídeo para mostrar =D

Bom, gravou, agora temos que listar! Vamos implementar um pouquinho de código no cadastro-pessoa-lista.component.ts

import { AngularFireDatabase, FirebaseListObservable } from ‘angularfire2/database’;
 pessoas: FirebaseListObservable<any[]>;
constructor(db: AngularFireDatabase) {
this.pessoas = db.list(‘pessoas’);
}

E no cadastro-pessoa.component.html.

<h1>Lista de pessoas</h1>
<ul>
<li *ngFor=”let p of pessoas| async”>
{{ p.nome + ‘ ‘ + p.sobrenome}}
</li>
</ul>

Devem ficar como nas imagens abaixo.

Agora vamos a mais um vídeo =D

Bom, desenvolvedoras, acho que era isso. Os códigos fontes estão todos no Github.

https://github.com/jelielmendes/simplesapprealtime

Como eu já havia dito antes, qualquer dúvida e sugestão, por favor, me avisem.