Skip to main content

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 option.
2. Multiple instance
Bootstrap: 
Replace the bootstrap declaration with:
 entryComponents: [  
   AppComponent1,   
   AppComponent2
 ]  
Index.html:
 <html>  
 <head>  
  <title>TestApplication</title>  
  <base href="/">  
  <meta name="viewport" content="width=device-width, initial-scale=1">  
  <link rel="icon" type="image/x-icon" href="favicon.ico">  
 </head>  
 <body>  
       <app-root1>Loading...</app-root1>  
       <app-root2> Loading...</app-root2>  
 </body>  
 </html>  

In cooperation with Ludwig Fischer

Comments

Popular posts from this blog

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  {  AngularFireDatabaseModule ,  AngularFireDatabase ,  FirebaseListObservable  }  from   'angularfire2/database' ; @ NgModule ({    declarations:  [      AppComponent   ],    imports:  [      BrowserModule ,      FormsModule ,      HttpModule ,      AngularFireModule . initializeApp ( firebaseConfig ),      AngularFireDatabaseModule , We also have to configure the AngularFireModule. export   const   fireba...

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

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