Wwwxhamstercom, Schweizer Pornodarstellerin, Japan Porm, Cosplay Sex Video, Lehrerin Bumsen, Tantra Massage Soest, Mann Fickt Katze, Harry Potter Hentai, Sie Sucht Ihn Sex Luebeck, Bisexuelle Deutsche Schlacken Anteil Schwanz, Ivy Madison Porn, Kianna Dior Pov, Egon Kowalski Fickt Junge Blondine, Hausfrauen Sexy, Deutsche Schlampe Entsaftet Spontan, Passau Ladie, Laengste Videos Nach Tag Lesben Pornos, Sex Kontakte In Hannover, Schmerzhafter Porno, Zoe Parker Porn, Pornokanal, Mom Gets Fucked, Amateur Handjob Compilation, Riesen Moebse, Videos Erotic, Hydie Waters Bekommt Ihren Grossen Ebenholzarsch Von Einem Kraeftigen Schwarzen Schwanz Gepfluegt, Arschleucher Lecken, Brazzers Porb, Laengste Videos Nach Tag Jung Schlampen, Violationee, Lesben Videos Kostenlos Deutsch, Harte Nippel Nackt, Bondage Sklavensau Auf Couch Versohlt, Free Oldie Sex, Lehrerin Ficken, You Prn, German Pickup Porn, Porn College, Young Little Pussy, Free Ponos, Pov Sandra, Porno Bdsm, Wie Spritzt Eine Frau Ab, Glatte Moese, Free Porn Stream Deutsch, Geilsau Gina Laesst Es Sich Auf Einem Heuballen Ordentlich Besorgen, Cam Tube Porn Gay, Gay Bareback, Webcam Luder Fickt Ihre Extrem Behaarte Fotze, Paar Sucht Paar In Hamburg, Germany Teen Porn, Sandra Romain Hd, Geile Krankenschwestern, Worms Puff, Nutten In Soest, Asiatische Prinzessin Mit Kleinen Titten Angelina Chung Knallte In Huendchenstellung, Dead Tube Sex, Bubble Butt Bouncing During Hard Fuck, Poppen 1, Kostenfrei Ficken, Pornhd Lesben, Kostenlose Gay Seiten, Haily Noire, Kostenlose Hardcorepornos, Top Bewertete Videos Von Tag Online Porno, Conny Dachs Fickt Blonde Stiefel Braut Anal, Geile Reife Frauen Kostenlos, Xxx Catwoman, Outdoor Ficken Am Strand, Deutsche Schauspielerin Porno, Lackfetisch, Ein Grosser Weisser Schwanz Fuer Vier Super Gestapelte Ebenholzkueken Im Buero, Gratis Muschifilme, Sex Tube Homemade, Wichsen Bis Der Schweiss Rinnt, Pornhuh, Strumpfhosen Amateure, Stewardess Handjob, Versteckte Kamera Porn, Teen Sex Videos Kostenlos, Ficken Im Sand, Pornofilm Classic, Sexy Blonde Ruft Gebohrt Gut Auf Pov Kamera, Gemuetlicher Sex, Fette Bbw, Nymphomane, Unterwuerfige Hacke Bobbi Dylan Muss Muschi Essen Und Schlampigen Schwanz Lutschen, Wwweinfach Pornode, German Amateur Teen Porn, Mit Jungschwanz Poppt Die Reife Deutsche Dirty Tina, Freundin Pussy, Sex Live Cam Kostenlos, Sexy Cora Fickt Dicken Kerl Von Der Strasse, Ronny Sex, Private Videos Xxx, Over 60 Sex Tube, Massagerooms Porn, Porn Hd 4k, Heather Vandeven Solo Action Auf Der Strasse, Nutten Aus Dresden, Dare Porn, Amateur Anal Fisting, Junges Girl Im Japan Porno Gefickt, Anime Big Tits, Schwester Fuck, Junge Schwanz Geniesserin Nach Dem Blasen Gefickt, Gangbang Skinny, Deutsche Nutte Massiv Vom Freier Durch Gefickt, Asa Akira Threesome, Besoffen Pornos, Junge Schluckt Sperma, Intimmassage Keuln, Girl Muschi, Pornobilder Oma, Deutsche Ehesau Vor Dem Katzenbaum Durch Gefickt, Wwwyouporn, Schmerzhafter Arschfick, Suche Nach Tag Votze Fingern, Transe Valentina, Paerchentreff Burgdorf, Deutsche Sexy Videos, Ein Alter Sack Fickt Die Deutsche Blondine, Sie Sucht Ihn Erotik Schweinfurt, Grosse Geile Schamlippen, Kiwiteens, Die Suesse Bruenette Gabi Fickt Einen Heissen Masseur Nach Der Massage, Asa Akari, Kikki Sex Cam, Teen Game Porn, Dicke Braeute, Franzmann Als Arsch Fick Koenig Im Retro Deutsch Porno, Ebony Teensex, Waitress Porn, Lesbian Ejaculation, Cum In Throat Compilation, Spritzen Sex, Beste Lesbenfilme, Hausfrau Mit Brille Und Grossen Natur Titten, Xnx Sex Com, 360 Porno, Schwiegertochter Sex, Po4nos, Minifotzen, Privat Home Video, Parkplatzsex Film, Sexxxton, Natalie Hot Filme, Erotik In Krefeld, Deutsche Junge Teen Schlampe Mit Fetten Busen Laesst Sich Filmem Beim Sex, Naughty Milf Anal Fuck And Piss In Mouth, 22 Sex Tube, Laydies De, Deutsche Goere Beim Fick Mit Einem Bbc Gefilmt, Natalie Lust Hd, Sex In Public Tube, Medieval Hentai, Besten Freund Verfuehren, Dicke Weiber Voegeln, Puf Bielefeld, Erotik Bad Saeckingen, Porno Stars Ficken, Fick Unter Wasser, Veugeln Video, Suche Nach Tag Woodman Casting, Fummeln In Der Sauna, Dirty Talk Com, Analplug Basteln, Pantyhosen, Titten69com, Saarbruecken Nutten, Nylon Hobbyhure Mila Bae Auf Dem Klo Durch Gefickt, Domina Peitscht, Das Erste Mal Sex Video, Brunette Cougar, Geile Maedchen Am Strand, Hoellenritt Bitch, Nina Devil Porno, Einfach Ponro, Tatu Porn, Milf Orgie, Japan Anal, Olivia Parrish, Mollige Schlampe Jana Schwarz Beim Date Gebumst, Sex Videos Vergewaltigung, Top Bewertete Videos Von Tag Deutscher Inzest Porno, Frivole Deutsche Weihnachts Fickerei, Massive Creampie Porn, Promis Mit Dicken Titten, Sexkontakte Delmenhorst, Orgie Porno, Kostenlos Porno Gangbang, Xnxx Com, Arschfick Maenner, Tribbing Porn, 3d Porn Download, Gianna Nicole, Orgie Sex Tube, Tori Black Compilation, Free Hentia, Gagging Video, Mydirtyhobby Amateur Chubby Redhead Dirtytalks And Teases Her Man Into Cuming On Her Pussy, Free 3d Hentai Porn, Pornos Arabisch, Porno Filmovi, Mature Double Fuck Movies Comfree, Porn 3oo, Milf Porn Mit Geiler Hausfrauen Dreiloch Stute, Fetter Weiberarsch, Moepse Porno, Sensual Jane Milf, Swingerclub Heidenheim, Eroberlin, Ava Alvares Porn, Public Bang, Klasik Porno, Vollbusige Schreie Als Sie Einen Orgasmus Erreicht, Blonde Porno, Nackte Frauen Beim Duschen, Mature Pervers, Porn De, Mega Wytrysk, Happy Family Porn, Geile Babysitterin, Juelz Ventura Bekommt Tolle Massage Von Kumpel, Asian Busty Porn, Sexsklavin Nackt, Frauenfreundliche Pornos, Sperma In Meuse, Erotick, Raucher Frau Bekommt Ihren Arsch Von Hinten Geknallt, Markt De Erotik Hessen, Ehefrau Zusehen, Seitensprung Fick, Freiluft Ficken Mit Der Geilen Mutti, Sex Vor Der Web Cam, Freeporn Japan, Versauten Nachbarin Fickt Herrenlose Muschi Asiatische Hacke Gia Grace, Teen Amateur Big Tits, Webcam Scheessel, Pornostars 2020, Free Porn Masage, Kaufmich Gera, Meli Deluxe Fickt Gemeinsam Mit Deutschem Paar Auf Der Liebesschaukel, Ficken Auf Festival, Leonie Saint Pornos, German Slut Gets Cums In Mouth, Eliza Ibarra Porn, Zuerst Ficken Dann Renovieren, Vintage Animal Sex Tube, Milf Dacada Fickt Mit Riesen Schwanz Bimbo, Jade Nile Pornos Sexfilme Kostenlos Frauporno, Deutsch Amateur Dreier, Sperma Queen, Handjob Queen, Cartoon Pornos, Bondage Andreaskreuz, Sex Kontakte Kiel, Im Porno Deutsch Wird Lola Ordentlich Zu Gepisst, Huebsche Aersche, Sex Gymnastik, Xnxx Boys, Erotik Sie Sucht Ihn Markt, Hobby Hure Dresden, Mein Feutzchen, Nackte Frauen Voegeln, Deutsche Frauen Ficken Gerne, Joy Babescom, Trans Escort Stuttgart, Amateurbustets, Sex Tube Uncensored, Nackte Frauen Free, Ao Sex In Bremen, Satter Blowjob In Der Deutschen Bahn, Kostenlose Pornos Zum Download, Porno Maturenl, Doggystyle Fick, Huren Olpe, Sex Frii, Www Xxx Hd Com, Geisha Sex Tube, Japanese Anal, Two Shy Girls Want To Masturbate Togetherexcl, Porno Movie Gratis, Muschi Selbst Machen, Russianteenporn, Gf Revenge Free, Pissschlampe, Gay Boy Hd, Sex Mit Schlafenden Frauen, Myporncom, Ficken In Russland, 3 Rat Porno, Free Passion Hd, Valerie Kay Porn, 80 Er Porn, Romantik Porn Hd, Alexis Teksas Porno, Brasilianische Pornodarstellerin, Itzehoe Sex, Naomi Watts Nackt, Nackte Schwule Maenner Bilder, Schlanke Puppe Else Jean Gefickt Huendchenstellungstyle Von Masseur, Val Dodds, Sexy Big Titts, Deutsche Schlampe Fickt Sich Mit Einer Gurke, Sexy Kissing, Vagosexcom, Sexy Car Wash Nackt, Gummi Ficken, Anal Sexcom, Russischen Maedchen Kira Wird Gefickt Von Ihrem Masseur, Fotos Porno Gratis, Free Porn Asian Teen, Niece Waidhofer Porn, Ficken Gegen Geld, Mein Unglaublichstes Teeny Outdoor Fick Erlebnis Ever Excl, Feen Porno, Ehrfuerchtige Brasilianische Stripperin Gina Valentina Arbeitet Auf Starke Schwarze Schwaenze, Hermine Fickt, Shemale Gesucht, Free Porn Web Cam, Teen Slips, Gaypornocom, Pornos Legal Schauen, Nackt Strip, Perfectgirls Deutsch, Lara Cumkitten Als Stiefelnutte Im Camper Durch Gefickt, Hard Porn Sex, Junge Blonde Von Afro Stechern Anal Benutz, Junge Blondine Porno, Sie Will Es Com, Sex Taunusstein, Nackte Beim Sex, Amateur Fisting Porn, Frau Mit Dildo Verweuhnen, Mutter Fetisch, Hd Porno Full, Im German Porn Teenie Im Hotelzimmer Gangbang Gefickt, Live Sex Cam Test, Shona Rive Geht In Die Kueche Um Zu Befriedigen Ihre Lust, Top Bewertete Videos Von Tag Scat Porno, Ladies Chemnitz De, Pataya Sex Tube, Hd Porn Creampie, Bbw Fat Belly, Older Lady Gets Fucked Hard By A Hunk With A Big Cock Outside, Harter Dreier Mit Der Sexy Lena Nitro, Geile Frau Verfuehrt, Alte Fickfilme, Aj Applegate Ist Eine Sexy Dynamischen Lesbische Maedchen Und Sie Liebt Geben Oral Sex, Gratis Al4a, Nuernberg Erotik, Latina Sex Cam, Happy End Massage Porn, Schlanke Deutsche Sperma Schlampen Bei Ohne Gummi Sexparty, Transe Mannheim, Lily Lane Porn, Reife Transe Beim Schwanzlutschen Und Arschfick, Nackter Sklave, Legal Porno, Kostenlose Pirnofilme, Appetitizing Blonde Alexis Texas Bei Kurvige Arsch Und Gluecklichen Rocco Reed, Mehrere Riemen Bearbeiten Den Deutschen Blondschopf, Hot Threesome With My Girlfriend, Kleine Schwaenze Porno, Fkk Hanau, Handjob Dirty Talk, Torture Handjob, Brazil Sex Tube, Phoenix Marie Pornhub, Overwatch Mei Porno, Ehemoesen, Outdoor Spanking, Anal Brunette, Die Vollbusige Freundin Mit Durchbohrten Brustwarzen Liebt Es Draussen In Der Naehe Des Ozeans Zu Fi, Umschnalldildo Porn, Wunderscheune Blondine, Nackte Amateur Girls, Schwuler Sex Porno, Veronica Leal, Sexfilme Aus Bayern, Lana Vegas, Moesen Videos, Feurige Dating Schlampe Laesst Sich Beim Ersten Treffen Poppen, Dog Sex Tube, Selfie Erotik, Top Bewertete Videos Von Tag Vater Und Sohn, Homemade Porn Hidden Cam, Gratis Sex Bremen, Escort Cuxhaven, Xvidsos, Sex In Borna, Samone Taylor, Blowjob In Movies, Sie Sucht Ihn Sex Lueneburg, Fussballerinnen Nackt, Golden Shower Porno, Karma Rx Porn, Haikyuu Porn, Frau Zieht Sich Nackt Aus, Cicciolina Nackt, Skandal In Der Familie Porn, Lia Louise Gang Bang, Lesben Arsch Lecken Mit Teen Asdis Und Oma Viol, Anateur, Amateursexde, Lesbian Nuns Porn, China Porn, Kv Hure, Quaelen Porno, Porn Italian, Porn Restaurant, Frauen Mit Grossen Schamlippen, Free Handjop, Sex Pornofilme, Blonde Student Bekommt Ihr Arschloch Gefuellt Mit Anal Plug, Hard Cocks, Spermageile Fotzen, Yanks Masturbation, Sophia Gold Laesst Es Sich Auf Dem Sofa Besorgen, Schwarzer Hengst Und Seine Freundin Ficken Duenne Deutsche Schlampe, Emily Grey Pornos Sexfilme Kostenlos Frauporno, Sextreffen Papenburg, Amateur German Mom Needs The Cash, Lucy Cat 94, Mutter Poppt Sohn, Lesbian Strapon, Muttis Moepse, Fuck My Wife, Porn Klassenfahrt, Dont Cum Inside, Hamster Com, Xn Xxn, Schwiegermutter Gefickt, Wie Richtig Ficken, Hamster Pornos, Vepirn, Sex Leipzig Quoka, Retro Deutsche Pornos, Scharfe Maus, Muttis Fotze, Nackte Frauen Mit Gespreizten Beinen, Pornhub Gefaehrlich, Doppeldecker Porno, Video Pornografico, Top Bewertete Videos Von Tag Teenie Sexfilme, Deutscher Vater Tochter Porno, Hardcore Sex Gay, Nackt Vulva, Fun Movies German Mature Housewife Fucked Outdoor, Kostenlose Brazzers, Sex Mit Russischen Frauen, Old Men Gay Tube, Gierige Fotzen, Tnafix, Wife Sex Cam, Sex Filmy Tube, Zwei Afroboys Fuer Eine Reife Frau, Sie Sucht Ihn Fuer Sex In Schleswig Holstein, Hobbyhuren Herne, Marissa Mae Porn, Mydurtyhobby, Geile Blonde Milf Genossen Hard Anal Sex Im Freien, Daddys Cock, Geile Sex Videos Kostenlos, Melanie Mueller Fotze Como criar um aplicativo com Firebase Realtime database e Angular - Fábrica de Código

Fábrica de Código

Nesse artigo você vai aprender como criar seu primeiro aplicativo com
o armazenamento de banco de dados com Firebase e Angular.
Para saber mais sobre o Firebase acesse o site clicando aqui.

 

O que é o Firebase Realtime Database?

O Firebase Realtime Database é um banco de dados online. Os dados são armazenados em formato JSON e sincronizados em tempo real com todos os clientes conectados independente da plataforma (Android, iOS, Web).

 

arvore do banco de dados - angular 2 e firebase

 

Realtime Database fornece uma linguagem de regras declarativas que permite que você defina como os dados devem ser estruturados, como devem ser indexados e quando podem ser lidos e gravados. Por padrão, o acesso de leitura e gravação ao seu banco de dados é restrito, exceto para usuários autenticados, portanto, você deve configurar as regras antes de começar

O Firebase Realtime Database permite você a criar um conjunto de regras para definir quando os dados podem ser lidos e gravados e também como indexar os dados para facilitar nas consultas.

Por padrão, as regras permitem que qualquer usuário identificado pode ler e gravar dados. Para saber mais sobre como criar regras e indexar os dados você pode clicar aqui. Na aplicação que será construída de exemplo vamos utilizar as regras e o index abaixo:

{
  "rules": {
        ".read": "true",
        ".write": "true",
      "tasks": {
        ".indexOn": ["done"]
      }
  }
}

 

regras do banco de dados - angular 2 e firebase

 

Criando uma aplicação de exemplo

Seguindo os passos abaixo você vai conseguir criar seu primeiro aplicativo com o Firebase Realtime Database. Como exemplo será criado um aplicativo de cadastro de tarefas.

 

demo - angular 2 e firebase

 

O que você vai aprender?

  • Criar uma aplicação com Angular 2 do zero.
  • Configurar a apliação para integrar com o Firebase.
  • Incluir, alterar, excluir e consultar dados no Firebase Realtime Database

 

Pré-requisitos:

 

1 – Criando um projeto no Firebase

Criar um projeto no Firebase é muito simples. Seguindo os passos abaixo você irá criar um projeto em poucos minutos.

 

1 – Na pagina principal do Firebase, apos efetuar o login com sua conta do Google, clique em “Ir para o console“.

 

2 – Agora clique no botão “Criar novo projeto”

 

3 – No modal que se abrir, informe o “nome do projeto”, a “região” e clique em “criar projeto”.

 

criando projeto no firebase - angular 2 e firebase

 

4 – Quando o processo terminar, clique no nome do projeto para ser redirecionado para o console do projeto.

 

2 – Criando um projeto com Angular

Criar um projeto do zero com Angular é muito simples basta seguir o passo a passo abaixo:

 

1 – Baixe o Angular 2 QuickStart direto do repositório do Angular no GitHub clicando aqui. Ou use os comandos abaixo:

git clone https://github.com/angular/quickstart.git nomedoseuprojeto
cd nomedoseuprojeto
npm install

 

2 – Delete os arquivos que não são necessários (opcional):

for /f %i in (non-essential-files.txt) do del %i /F /S /Q
rd .git /s /q
rd e2e /s /q

 

3 – Para ver o projeto em funcionamento no navegador utilize o comando abaixo:

npm start

 

3 – Adicionando Firebase ao projeto

Para manipular o Firebase vamos utilizar a biblioteca oficial do Angular que é a AngularFire2.

Vamos também utilizar o npm para instalar as dependências com o Firebase e o AngularFire2.

Na publicação desse artigo as versões estáveis das bibliotecas do Firebase e AngularFire2 são “3.4.0” e “2.0.0-beta.8” respectivamente.

 

1 – Abra o aquivo package.json e adicione as linhas abaixo em “dependencies”.

"firebase": "3.4.0",
"angularfire2": "2.0.0-beta.8"

 

2 – Abra o arquivo src/systemjs.config.js

Em map adicione as linhas abaixo:

'angularfire2': 'npm:angularfire2/bundles',
'firebase': 'npm:firebase'

Em packages adicione as linhas abaixo:

angularfire2: {
        main: 'angularfire2.umd.js'
},
firebase: {
        main: 'firebase.js'
}

 

3 – Navegue até a pasta do projeto e execute o comando abaixo para instalar as dependências na versões especificadas:

npm install

 

4 – Abra o arquivo src/app/app.module.ts e adicione o provider e as configurações do Firebase:

Você pode pegar suas configurações do Firebase na pagina inicial do projeto clicando no botão “Adicionar o Firebase ao seu aplicativo da Web”.

 

onde pegar as configuracoes do firebase - angular 2 e firebase

Arquivo src/app/app.module.ts

import { NgModule }      from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent }  from './app.component';
import { AngularFireModule } from 'angularfire2';

export const firebaseConfig = {
  apiKey: '[SUA-APIKEY]',
  authDomain: '[SEU-AUTH-DOMAIN]',
  databaseURL: '[SUA-DATABASE-URL]',
  storageBucket: '[SEU-STORAGE-BUCKET]',
  messagingSenderId: '[SEU-MESSAGING-SENDER-ID]'
};

@NgModule({
  imports:      [
    BrowserModule,
    AngularFireModule.initializeApp(firebaseConfig)
  ],
  declarations: [ AppComponent ],
  bootstrap:    [ AppComponent ]
})
export class AppModule { }

 

4 – Criando o componente para criar tarefas

1 – Criar uma classe de nome task.model.ts no caminho src/app/todo/ para colocar quais serão as propriedades de uma tarefa. Para uma tarefa precisamos de um titulo, descrição, uma flag para informar se está ou não concluída e a propriedade $key que será o identificador do registro no Firebase.

Arquivo src/app/todo/task.model.ts

export class Task {
  done: boolean;
  title: string;
  description: string;
  $key: string;
}

 

2 – Agora vamos criar o serviço que vai fazer as operações de incluir, alterar, excluir e consultar os registros no Firebase.

Para isso vamos criar um arquivo de nome task.service.ts no caminho src/app/todo/

import { Injectable } from '@angular/core';
import { Task } from './task.model';
import { AngularFire, FirebaseListObservable } from 'angularfire2';

@Injectable()
export class TaskService {
  angularfire: AngularFire;
  items: FirebaseListObservable<any>;

  constructor(af: AngularFire) {
    this.angularfire = af;
  }

  getAll() {
    // Buscando todos os itens no no "/task"
    this.items = this.angularfire.database.list('/tasks');
    return this.items;
  }

  getAllCompleted() {
    // Buscando todos os itens que estão completos
    this.items = this.angularfire.database.list('/tasks',  {
      query: {
        orderByChild: 'done', // filtrando pelo campo "done"
        equalTo: true // e que tanha o valor true
      }
    });
    return this.items;
  }

  getAllOpened() {
    // Buscando todos os itens que estão em aberto
    this.items = this.angularfire.database.list('/tasks',  {
      query: {
        orderByChild: 'done', // filtrando pelo campo "done"
        equalTo: false // e que tanha o valor false
      }
    });
    return this.items;
  }

  add(task: Task) {
    // Adicionando uma nova tarefa.
    // Toda nova tarefa é gravada como em aberto por padrão.
    task.done = false;

    // Adicionando o item na lista de itens. 
    // Como essa lista é carregada antes, automaticamente o angularfire2
    // identifica a mudança na lista e inclui o item novo.
    this.items.push(task);
  }

  update(task: Task) {
    // Atualizando o item na lista.
    // Para isso passamos por parametro qual é o id do item no Firebase
    // e quais são os novos valores.
    this.items.update(task.$key, task);
  }

  save(task: Task) {
    // Metodo criado para facilitar a inclusão/alteração e um item.
    // Verifico se o item tem o Id para saber se é uma inclusão ou alteração.
    if (task.$key == null) {
      this.add(task);
    } else {
      this.update(task);
    }
  }

  remove(task: Task) {
    // Removendo um item da lista
    this.items.remove(task.$key);
  }

  toggleDone(task: Task) {
    // Marcando uma tarefa como concluída ou em aberto.
    task.done = !task.done;
    this.update(task);
  }
}

 

3 – Agora vamos criar o componente que ira exibir o formulário para inclusão/alteração e os itens na tela. Para isso vamos criar o arquivo task.component.ts no caminho src/app/todo/

import { Component, OnInit } from '@angular/core';
import { Task } from './task.model';
import { TaskService } from './task.service';
import { FirebaseListObservable } from 'angularfire2';

@Component({
  selector: 'todo-task',
  templateUrl: 'app/todo/task.component.html'
})
export class TaskComponent implements OnInit {
  tasks: FirebaseListObservable<any>;
  task: Task;

  constructor(private taskService: TaskService) {
    this.task = new Task();
  }

  ngOnInit() {
    // Ao iniciar o componente, busco todos os items já existentes no Firebase.
    this.tasks = this.taskService.getAll();
  }

  saveTask() {
    // Se os campos do formulario foram preenchidos, adiciono a nova tarefa.
    if (this.task.title && this.task.description) {
      this.taskService.save(this.task);
      this.task = new Task();
    }
  }

  editTask(task: Task) {
    // Ao clicar 2x em um item da lista e vai para o formulário para ser editado.
    this.task = task;
  }

  remove(task: Task) {
    this.taskService.remove(task);
  }

  toggleDone(task: Task) {
    this.taskService.toggleDone(task);
  }

  filterTasks(filter: number) {
    // Filtrando os itens
    switch (filter) {
      case 1: // Todos
        this.tasks = this.taskService.getAll();
        break;
      case 2: // Todas tarefas em aberto
        this.tasks = this.taskService.getAllOpened();
        break;
      case 3: // Todas tarefas concluídas
        this.tasks = this.taskService.getAllCompleted();
        break;
    }
  }
}

 

4 – E agora o arquivo HTML que será o template do componente. Para isso vamos criar o arquivo task.component.html no caminho src/app/todo/

<h1 class="text-center">ToDo - Fábrica de Código</h1>

<div class="row">
    <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">

        <div class="panel panel-primary">
            <div class="panel-body">
                <form role="form" novalidate>
                    <div class="form-group">
                        <label for="title">Título</label>
                        <input [(ngModel)]="task.title" type="text" class="form-control" id="title" name="title" placeholder="O que você deseja fazer?" required />
                    </div>

                    <div class="form-group">
                        <label for="description">Descrição</label>
                        <input [(ngModel)]="task.description" type="text" class="form-control" id="description" name="description" placeholder="Uma pequena descrição" required />
                    </div>

                    <button type="submit" class="btn btn-primary" (click)="saveTask()">Salvar</button>                    
                </form>
            </div>
        </div>
    </div>
</div>

<div class="row">
    <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
        <div class="panel panel-primary">
            <div class="panel-heading">
                <h3 class="panel-title">Tarefas</h3>
            </div>
            <div class="panel-body">
                <div class="bs-callout" *ngFor="let task of tasks | async" [ngClass]="{ 'bs-callout-primary': !task.done }">
                    <div class="row">

                        <div class="col-xs-1 col-sm-1 col-md-1 col-lg-1">
                            <input type="checkbox" [checked]="task.done" (click)="toggleDone(task)" />
                        </div>

                        <div class="col-xs-10 col-sm-10 col-md-10 col-lg-10" (dblclick)="editTask(task)">
                            <h4 [ngClass]="{ 'item-done': task.done }">{{task.title}}</h4>
                            <div [ngClass]="{ 'item-done': task.done }">{{task.description}}</div>
                            <div>{{ task.$value }}</div>
                        </div>

                        <div class="col-xs-1 col-sm-1 col-md-1 col-lg-1 remove">
                            <a (click)="remove(task)">
                                <span class="glyphicon glyphicon-remove" aria-hidden="true"></span>
                            </a>
                        </div>
                    </div>
                </div>
            </div>            
            <div class="panel-footer">
                <label class="radio-inline">
                    <input (click)="filterTasks(1)" type="radio" name="statusTask" id="todos" value="1" checked > Todas
                </label>
                <label class="radio-inline">
                    <input (click)="filterTasks(2)" type="radio" name="statusTask" id="ativos" value="2"> Ativas
                </label>
                <label class="radio-inline">
                    <input (click)="filterTasks(3)" type="radio" name="statusTask" id="completas" value="2"> Completas
                </label>
            </div>
        </div>
    </div>
</div>

Atenção para listar os itens é necessário usar o Pipe async do angular para garantir que sempre vamos listar os valores mais atuais do Firebase.

 

5 – Agora é necessário modificar o arquivo src/app/app.component.ts e adicionar o serviço TaskService, que foi criado acima, como um provider.

import { Component } from '@angular/core';
import { TaskService } from './todo/task.service';

@Component({
  selector: 'todo-app',
  template: `<todo-task></todo-task>`,
  providers: [ TaskService ]
})
export class AppComponent { }

 

6 – E por fim precisamos editar o arquivo src/app/app.module.ts novamente e incluir as referencias para o FormsModule do angular e o componente TaskComponent criado acima.

import { NgModule }      from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent }  from './app.component';
import { AngularFireModule } from 'angularfire2';
import { FormsModule }   from '@angular/forms';
import { TaskComponent }  from './todo/task.component';


export const firebaseConfig = {
  apiKey: 'AIzaSyCz7kugPPNI24kcVjjNTO4HiGpqKDvn8J0',
  authDomain: 'todofabricadecodigo-c6949.firebaseapp.com',
  databaseURL: 'https://todofabricadecodigo-c6949.firebaseio.com',
  storageBucket: 'todofabricadecodigo-c6949.appspot.com',
  messagingSenderId: '902107944829'
};

@NgModule({
  imports:      [
    BrowserModule,
    FormsModule,
    AngularFireModule.initializeApp(firebaseConfig)
  ],
  declarations: [ AppComponent, TaskComponent ],
  bootstrap:    [ AppComponent ]
})
export class AppModule { }

 

Conclusão

É muito simples fazer uma integração entre o Angular e o Firebase e apesar o AngularFire2 ser uma biblioteca ainda em fase beta, ela fornesse bastante recurso para que você consiga trabalhar com o Firebase.

 

Referencias:

 

Eu espero que esse tutorial tenha sido útil para você. Qualquer dúvida
deixe seu comentário abaixo.

Respostas de 8

  1. Ola Amigo muito bom o seu app parabéns mas o meu quando fiz seguindo seu tutorial deu esse erro abaixo!

    src/app/app.module.ts(4,35): error TS2307: Cannot find module ‘angularfire2’.
    src/app/todo/task.component.ts(4,40): error TS2307: Cannot find module ‘angularfire2’.
    src/app/todo/task.service.ts(3,53): error TS2307: Cannot find module ‘angularfire2’.

    que consegui resolver com a linha de código que executei no cmd!

    npm install angularfire2 firebase –save

    Valeu amigo!

  2. o que fazer quando o sistema dá esse erro?
    ERROR Error: The selector “todo-app” did not match any elements
    Pode me ajudar?

  3. Fala Jayton, blz?

    Nesse exemplo o “todo-app” é o nome do componente principal, ou seja, la no arquivo app.component.ts no atributo @Component tem a propriedade selector e nela está o “todo-app”, conforme abaixo:

    import { Component } from ‘@angular/core’;
    import { TaskService } from ‘./todo/task.service’;

    @Component({
    selector: ‘todo-app’,
    template: “,
    providers: [ TaskService ]
    })
    export class AppComponent { }

    Veja se no seu código o nome do componente também é “todo-app”, caso não seja é só pegar o nome que está aí e substituir onde o “todo-app” é usado.

    Seria isso?
    Valeu!