Skip to main content

Create a simple Messageboard with Firebase and Angular4



You want that your users can leave messages in your Angular Application. In this Article I explain how you can implement this with Angular 4 and Firebase.


First we have to import the Moduls for Firebase in our app.module.ts and our component.


app.module.ts
import { AngularFireModule } from 'angularfire2';
import { AngularFireDatabaseModuleAngularFireDatabaseFirebaseListObservable } from 'angularfire2/database';



@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    FormsModule,
    HttpModule,
    AngularFireModule.initializeApp(firebaseConfig),
    AngularFireDatabaseModule,

We also have to configure the AngularFireModule.


export const firebaseConfig = {
  apiKey: "",
    authDomain: "",
    databaseURL: "",
    projectId: "",
    storageBucket: "",
    messagingSenderId: ""
};

You get this information at your Firebase console.






component:

import { AngularFireDatabaseModuleAngularFireDatabaseFirebaseListObservable } from 'angularfire2/database';
import * as firebase from 'firebase/app';



Then we declare a variable in which we save the input and this variable get pushed to Firebase. These item variable is from type FireBaseListObservable We also need a message variable.


itemsFirebaseListObservable<any[]>
messageany

Now we write our function. In my case I push a message and the name from the user to the Firebase Database. I am getting the name from the social login. You can read in my previous article, how you can set up the social login in your Angular application.


chatSend(theirMessagestring) {
      this.items.push({ message: theirMessagename: this.afAuth.auth.currentUser.displayName});
      this.message = "";
  }

If we done this it’s time to write some HTML. 

<div  *ngIf="(user | async)?.uid">
<input type="text" id="message"  placeholder="Chat here..." (keyup.enter)="chatSend($event.target.value)" [(ngModel)]="message" >

    <div *ngFor="let item of items | async">
      <a href="#">{{item.name}}</a>
      
      <p>{{item.message}}</p>
    </div> 
</div>

I don’t show the message board if the user is not logged in. 

*ngIf="(user | async)?.uid"

If the user is logged in, the user can write a message and send it via enter. I am using keyup.enter to call our chatSend function.
<input type="text" id="message"  placeholder="Chat here..." (keyup.enter)="chatSend($event.target.value)" [(ngModel)]="message" >

Below our input line I show all messages with the users displayname. Don’t forget using async, when you are working with Firebase.


<div *ngFor="let item of items | async">
      <a href="#">{{item.name}}</a>    
      <p>{{item.message}}</p>
    </div> 



That’s it!


Comments

Popular posts from this blog

Angular 2: Multiple instances in the same Application

Requirement:  Use multiple Root-Components in the same Application  This Root-Components use the same Implementations and Services Display the Root-Components on the same Single-Page Solution: App-Module preparation: import { BrowserModule, DOCUMENT } from '@angular/platform-browser'; import { NgModule, Inject, Component } from '@angular/core'; export class AppModule { private browser_document; ngDoBootstrap(appRef){ if(this.browser_document.getElementsByTagName('app-root1').length > 0){appRef.bootstrap(AppComponent1);} if(this.browser_document.getElementsByTagName('app-root2').length > 0){appRef.bootstrap(AppComponent2);} } constructor(@Inject(DOCUMENT) private document: any){ this.browser_document = document; } } Service preparation: Angular 2 has two options to provide a service. 1. Single instance For a multiple implementation of more Root-Components we need the second opt...

Generate documentation for Angular projects with Compodoc

Sometimes the structure of Angular projects can become confusing. After adding tons of components and modules it might be difficult to keep track of what is what. Compodoc can help you out by generating a much better to read documentation for your project. It can give you a visual and easy to browse overview of all the code in your application and lots of useful features. How to install: Compodoc is available by npm. First install it globally: npm install -g @compodoc/compodoc Then install it in your project: npm install --save-dev @compodoc/compodoc In a next step you have to add a command to your package.json. In the 'scripts' area add the following line: "compodoc" :  "./node_modules/.bin/compodoc -p src/tsconfig.app.json" Hint: in the original documentation at the moment it refers to tsconfig.json which is wrong and would give you an error message. Finally generate the documentation and open it in the browser: npm run compodoc co...

Download a file with Angular2+ and FileSaver.js

Why should your Angular code download a file? Of course your webserver can deliver files and you can just add a simple link to your website but what if the file is delivered by a webservice and the webservice requests authentication (i.e. OAuth) to protect the file from unauthorized access? In this case you might have the requirement to download the file in your code and then tell the browser to save it to the hard disk. How to do that?   First of all you need to add filesaver.js to your project.  npm install file-saver --save ..and add the typings npm install @types/file-saver --save-dev More information about filesaver you can find on the filesaver github pages . To download the file via http you need to implement a service. The following imports are required: import  {  Injectable  }  from   '@angular/core' ; import  {  Http ,  Response ,  RequestOptions ,  ResponseContentType  }  from   ...