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

Social Login with Angular 4 and FireBase

There is a way to let users use there social logins to get access to Firebase. But how do you implement this login to your Angular 4 project. In this article I will tell you how to set up your Firebase database and how do you implement social login to your angular project. Set up Firebase First we have to get our database ready. In your Firebase Console you will find Authentication in the left navigation bar. At the tab Sign-In Method you can enable different sign in methods. In our example we will enable Google and Facebook, as it's the most commend social login methods these days. The Google Login will be configured automatically. When you enable Facebook Login you need an App ID and an App Secret. You will get these when you register yourself as a developer at Facebook. You can read how you can do that at the Facebook Site . I will not explain you that in detail because it's very easy. If we done, it's time to set up our Angular4 code. Install Ang...

Utilize 3rd party Javascript libraries in your Angular 2+ application with CLI

Not everything is available as a native Typescript library. Due to that sometimes you might need to use 3rd party libraries. After creating a new project with Angular CLI you will experience that VS Code does not know any libraries you have imported in the header tag and the compiler complains when you try to use this libraries. The reason is: You are missing the typings. The typings describe the functionality of the libary and make that available in your project through intellisense and for the compiler. But before you start creating your own typings do the following checks: 1. Does the vendor of the library provide the typings? If yes, install through npm 2. Are the typings available on definitely typed ? If yes, then take it from there. If this is not the case then you can do your own typings. If you want to do that properly, then you should write the complete set of typings for the library and upload to definitely typed to provide it for the community. OK, this might b...

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...