I've recently started playing with angular 2 and my experience so far is awesome. I have some good experience with ng1
and React
as well. So, this is more of a general question and a confusion as well. I am pretty sure this would help out a lot of other people as well as I haven't really found any direct answer to this.
So let's say I have this module
protected.module.ts
where I have some components registered. So, in order to use primitive directives ngFor, ngIf
I would have to import CommonModule
to the the specific module but along with that I would have to import this to the main entry module i.e. app.module.ts
.
app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { CommonModule } from '@angular/common';
import { AlertModule } from 'ng2-bootstrap';
import { LayoutModule } from './layout/layout.module';
import { UsersModule } from './users/users.module';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { ProtectedModule } from './protected/protected.module';
import { PageNotFoundComponent } from './shared/components/not-found.component';
@NgModule({
declarations: [
AppComponent,
PageNotFoundComponent
],
imports: [
BrowserModule,
FormsModule,
CommonModule,
HttpModule,
AlertModule.forRoot(),
LayoutModule,
ProtectedModule,
UsersModule,
AppRoutingModule,
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
protected.module.ts
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { HomeComponent } from './home/home.component';
import { ProtectedRoutingModule } from './protected-routing.module';
@NgModule({
imports: [ProtectedRoutingModule, CommonModule],
declarations: [HomeComponent],
exports: [HomeComponent]
})
export class ProtectedModule { }
So, the confusion I had was if there was a way to just import some module globally in app.module
if we wanted to use that module across all the modules that we would eventually have? With this way, it seems like a overhaul to me that we need to import it to different places. Or am I missing some point here completely?
Thank you in advance and I really hope this would be beneficial for me and to other folks as well.
I think you'd be best served with a shared module
Your other
modules
(typicallyfeature modules
in my experience) can all import thisshared module
.As described in the documentation, you can reduce the repeated import statements by having the
SharedModule
re-export common dependencies e.g.CommonModule
,FormsModule
As an example, you can have a shared module just re-export
BrowserModule
,FormsModule
andHttpModule
like this:And then in your other modules, instead of importing those same modules, just import the
SharedModule
like below. Every module that imports theSharedModule
will be able to use everything exported from theSharedModule
without explicitly importing it again.